从 Azure 流分析作业写入 Azure SQL 数据库表

Azure 流分析支持将 Azure SQL 数据库作为流式处理查询的输出。 本文介绍如何在 Azure 门户中使用 SQL 数据库作为流分析作业的输出。

先决条件

  1. 创建流分析作业。

  2. 创建流分析作业将向其写入输出的 Azure SQL 数据库。

写入 SQL 数据库中的新表

本节介绍如何将作业配置为写入尚未创建的 Azure SQL 数据库中的表。

  1. 在流分析作业中,选择“作业”拓扑下的“输出”。 单击“添加”并选择“SQL 数据库”。

    Screenshot showing SQL DB output in Stream Analytics.

  2. 选择将在作业的查询中使用的输出别名。 提供数据库名称和身份验证模式。 可以通过 SQL 输出配置选项详细了解相关信息。

  3. 输入要在 Azure SQL 数据库中创建的表的名称。 单击“ 保存”。 注意:保存此输出不会在 SQL 数据库中创建表。 接下来的步骤将提供有关何时创建表的详细信息。

    Screenshot showing SQL DB output configuration in Stream Analytics.

  4. 选择“作业拓扑”下的“查询”,然后使用查询中的别名将输出写入上一步骤中提供的表名中。 单击“测试查询”以测试查询逻辑,并查看“测试结果”,结果中显示了将由作业生成的输出的架构。 注意:要测试查询,需要在输入源中具有传入流数据,或者能够将示例数据上传到测试查询中。 可以通过测试流分析查询了解详细信息。

    Screenshot showing query testing in Stream Analytics.

    Screenshot showing query tests results in Stream Analytics.

  5. 单击“SQL 表架构”以查看列名和类型。 单击“创建表”,SQL 数据库中即会创建表。

    Screenshot showing creating a table in SQL database from Stream Analytics.

    如果将流分析查询修改为生成不同的架构,则需要在 SQL 数据库中更改表定义。 这可以确保在尝试写入接收器时,流分析作业不会遇到数据转换问题。

  6. 查询为最终版后,选择“概述”并“启动”作业。 然后,便可以导航到 SQL 数据表查看流式处理查询输出。

从 SQL 数据库选择现有表

本节介绍如何将作业配置为写入 Azure SQL 数据库中已有的表。

  1. 在流分析作业中,选择“作业”拓扑下的“输出”。 单击“添加”并选择“SQL 数据库”。

    Screenshot showing SQL DB output in Stream Analytics.

  2. 选择将在作业的查询中使用的输出别名。 提供数据库名称和身份验证模式。 可以通过 SQL 输出配置选项详细了解相关信息。

  3. 可以通过输入 SQL 身份验证详细信息,从所选的 SQL 数据库选择一个现有表。 这会加载数据库中的表名列表。 从列表中选择表名,或者手动输入表名,然后单击“保存”。

    Screenshot showing existing table in SQL database.

  4. 选择“作业拓扑”下的“查询”,然后使用查询中的别名将输出写入所选的表。 单击“测试查询”,测试查询逻辑并查看“测试结果”。 注意:要测试查询,需要在事件中心/ IoT 中心中具有传入流式处理数据,或者能够将示例数据上传到测试查询。 可以通过测试流分析查询了解详细信息。

    Screenshot showing query testing in Stream Analytics.

    Screenshot showing query tests results in Stream Analytics.

  5. 在“SQL 表架构”选项卡中,可以从传入数据和所选表中看到列名及其类型。 可以查看传入数据类型和所选 SQL 表的状态是否匹配。 如果不匹配,系统会提示更新查询以匹配表架构。

    Screenshot showing schema comparison in Stream Analytics.

  6. 查询为最终版后,选择“概述”并“启动”作业。 然后,便可以导航到 SQL 数据表查看流式处理查询输出。

常见的数据类型不匹配原因

确保流分析作业的输出与 SQL 数据库表预期的列名和数据类型匹配非常重要。 如果存在不匹配的情况,作业将遇到数据转换问题,并将持续重试,直至更改 SQL 表定义。 可以更改作业的行为,删除此类会导致数据转换错误的输出并继续进行下一步操作。 最常见的架构不匹配原因如下所述。

  • 类型不匹配:查询类型和目标类型不兼容。 行不会插入目标中。 请使用转换函数(例如 TRY_CAST())调整查询中的类型。 另一种选项是在 SQL 数据库中更改目标表。
  • 范围:目标类型范围比查询中使用的范围小很多。 具有超出范围值的行可能不会插入目标表或被截断。 请考虑将目标列更改为更大的类型范围。
  • 隐式:查询类型和目标类型不同,但能够互相兼容。 系统将隐式转换数据,但这可能会导致数据丢失或故障。 请使用转换函数(例如 TRY_CAST())调整查询中的类型,或者更改目标表。
  • 记录:输出尚不支持此类型。 系统将使用字符串“record”替代值。 请考虑分析数据,或使用 UDF 将其转换为字符串
  • 数组:Azure SQL 数据库中尚未原生支持此类型。 系统将使用字符串“record”替代值。 请考虑分析数据,或使用 UDF 将其转换为字符串
  • 目标表中缺少列:目标表中缺少此列。 不会插入数据。 如有需要,请将此列添加到目标表。

后续步骤