了解 Azure 流分析的输出

本文将介绍适用于 Azure 流分析作业的不同类型的输出。 输出可帮助存储和保存流分析作业的结果。 使用输出数据,可进一步进行业务分析和数据的数据仓储。

设计流分析查询时,使用 INTO 子句引用输出的名称。 可针对每个作业使用单个输出,如果需要,也可通过在查询中提供多个 INTO 子句,针对每个流式处理作业使用多个输出。

要创建、编辑和测试流分析作业输出,可使用 Azure 门户Azure PowerShell.Net APIREST API

部分输出类型支持分区,并且输出批大小可变化以优化吞吐量。

SQL 数据库

可以将 Azure SQL 数据库用作本质上为关系型数据的输出,也可以将其用于所依赖的内容在关系数据库中托管的应用程序。 流分析作业将写入到 Azure SQL 数据库的现有表中。 请注意表架构必须与字段及其正从作业输出的类型完全匹配。 Azure SQL 数据仓库也可以通过 SQL 数据库输出选项指定为输出。 下表列出了属性名称和用于创建 SQL 数据库输出的属性说明。

属性名称 说明
输出别名 在查询中使用的友好名称,用于将查询输出定向到此数据库。
数据库 数据库的名称(正在向该数据库发送输出)。
服务器名称 SQL 数据库服务器名称。
用户名 有权写入到数据库的用户名。
密码 用于连接到数据库的密码。
将写入输出的表名称。 表名称区分大小写,并且该表架构应与字段数量以及作业输出正在生成的字段类型完全匹配。

Note

目前,流分析中的作业输出支持 Azure SQL 数据库产品/服务。 但是,不支持附加了数据库,运行 SQL Server 的 Azure 虚拟机。 这在将来的版本中可能会有所改变。

Blob 存储

Blob 存储提供了一种经济高效且可缩放的解决方案,用于在云中存储大量非结构化数据。 有关 Azure Blob 存储及其用法的简介,请参阅如何使用 Blob 处的文档。

下表列出了属性名称和用于创建 blob 输出的属性说明。

属性名称 说明
输出别名 查询中使用的友好名称,用于将查询输出定向到此 blob 存储。
存储帐户 存储帐户的名称(正在向该存储帐户发送输出)。
存储帐户密钥 与存储帐户关联的密钥。
存储容器 容器对存储在 Azure Blob 服务中的 blob 进行逻辑分组。 将 blob 上传到 Blob 服务时,必须为该 blob 指定一个容器。
路径模式 可选。 用于写入指定容器中的 blob 的文件路径模式。

在路径模式中,可以选择使用数据时间变量的一个或多个实例指定 blob 写入的频率:
{date}、{time}

如果已注册预览版,则可以从事件数据中指定一个自定义 {field} 名称来对 blob 进行分区。 字段名称是字母数字,并且可以包含空格、连字符和下划线。 对自定义字段的限制包括以下内容:
  • 不区分大小写(不区分列“ID”和列“id”)
  • 不允许嵌套字段(在作业查询中改用别名来“平展”字段)
  • 不能使用表达式作为字段名称。


在预览版中,还可以在路径中使用自定义日期/时间格式说明符配置。 一次只能指定一个自定义日期和时间格式,并用 {datetime:<specifier>} 关键字括起来。 允许的输入 <specifier> 为 yyyy、MM、M、dd、d、HH、H、mm、m、ss 或 s。 可能会在路径中多次使用 {datetime:<specifier>} 关键字以形成自定义日期/时间配置。

示例:
  • 示例 1:cluster1/logs/{date}/{time}
  • 示例 2:cluster1/logs/{date}
  • 示例 3(预览版):cluster1/{client_id}/{date}/{time}
  • 示例 4(预览版):cluster1/{datetime:ss}/{myField},其中查询为:SELECT data.myField AS myField FROM Input;
  • 示例 5(预览版):cluster1/year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}


创建的文件夹结构的时间戳遵循 UTC 而不是本地时间。

文件命名将遵循以下约定:

{路径前缀模式}/schemaHashcode_Guid_Number.extension

示例输出文件:
  • Myoutput/20170901/00/45434_gguid_1.csv
  • Myoutput/20170901/01/45434_gguid_1.csv
日期格式 可选。 如果在前缀路径中使用日期令牌,可以选择组织文件所采用的日期格式。 示例:YYYY/MM/DD
时间格式 可选。 如果在前缀路径中使用时间令牌,可以指定组织文件所采用的时间格式。 目前唯一支持的值是 HH。
事件序列化格式 输出数据的序列化格式。 支持 JSON、CSV 和 Avro。
编码 如果使用 CSV 或 JSON 格式,则必须指定一种编码格式。 目前只支持 UTF-8 这种编码格式。
分隔符 仅适用于 CSV 序列化。 流分析支持大量的常见分隔符以对 CSV 数据进行序列化。 支持的值为逗号、分号、空格、制表符和竖线。
格式 仅适用于 JSON 序列化。 分隔行指定通过新行分隔各个 JSON 对象,从而格式化输出。 数组指定输出会被格式化为 JSON 对象的数组。 仅当作业停止或流分析移动到下个时间段时,才关闭此数组。 一般而言,最好使用分隔行 JSON,因为在继续写入输出文件时,无需任何特殊处理。

当使用 blob 存储作为输出时,在以下情况下 blob 中创建一个新文件:

  • 如果文件超出了允许的最大块数(目前为 50,000)。 可达到允许的最大块数,但不能达到允许的最大 blob 大小。 例如,如果输出率很高,则可以看到每个块的字节更多,并且文件大小会更大。 输出率较低时,每个块都有较少的数据,且文件大小较小。
  • 如果输出中出现架构更改,输出格式也需要固定的架构(CSV 和 Avro)。
  • 如果作业重新启动,可选择在外部由用户停止或启动,或在内部进行系统维护或错误恢复。
  • 如果对查询进行完全分区,会为每个输出分区创建新文件。
  • 如果用户删除存储帐户的文件或容器。
  • 如果使用路径前缀模式对输出进行了时间分区,当查询移动到下一个小时后,会使用新的 blob。
  • 如果按自定义字段对输出进行分区,则每个分区键都会创建新的 blob(如果不存在)。
  • 如果按照自定义字段对输出进行分区(其中分区键基数超过 8000),则可能每个分区键创建一个新的 blob。

事件中心

Azure 事件中心服务是具有高扩展性的发布 - 订阅事件引入器。 事件中心每秒可收集数百万个事件。 当流分析作业的输出成为另一个流式处理作业的输入时,可以将事件中心用作输出。

将事件中心数据流配置为输出时,需要使用几个参数。

属性名称 说明
输出别名 查询中使用的友好名称,用于将查询输出定向到此事件中心。
事件中心命名空间 事件中心命名空间是包含一组消息传递实体的容器。 创建新的事件中心后,还创建了事件中心命名空间。
事件中心名称 事件中心输出的名称。
事件中心策略名称 可以在事件中心的“配置”选项卡上创建的共享访问策略。每个共享访问策略具有名称、所设权限以及访问密钥。
事件中心策略密钥 用于对事件中心命名空间的访问权限进行身份验证的共享访问密钥。
分区键列 [可选] 此列包含事件中心输出的分区键。
事件序列化格式 输出数据的序列化格式。 支持 JSON、CSV 和 Avro。
编码 对于 CSV 和 JSON,目前只支持 UTF-8 这种编码格式。
分隔符 仅适用于 CSV 序列化。 流分析支持大量的常见分隔符以对 CSV 格式的数据进行序列化。 支持的值为逗号、分号、空格、制表符和竖线。
格式 仅适用于 JSON 序列化。 分隔行指定通过新行分隔各个 JSON 对象,从而格式化输出。 数组指定输出会被格式化为 JSON 对象的数组。 仅当作业停止或流分析移动到下个时间段时,才关闭此数组。 一般而言,最好使用分隔行 JSON,因为在继续写入输出文件时,无需任何特殊处理。

表存储

Azure 表存储提供了具有高可用性且可大规模缩放的存储,因此应用程序可以自动缩放以满足用户需求。 表存储是世纪互联推出的 NoSQL 键/属性存储,适用于对架构的约束较少的结构化数据。 Azure 表存储可用于持久地存储数据,方便进行高效的检索。

下表列出了属性名称和用于创建表输出的属性说明。

属性名称 说明
输出别名 该名称是在查询中使用的友好名称,用于将查询输出定向到此表存储。
存储帐户 存储帐户的名称(正在向该存储帐户发送输出)。
存储帐户密钥 与存储帐户关联的访问密钥。
表名称 表的名称。 如果表不存在,则创建新表。
分区键 包含分区键的输出列的名称。 分区键是某个给定表中分区的唯一标识符,分区键构成了实体主键的第一部分。 分区键是一个最大为 1 KB 的字符串值。
行键 包含行键的输出列的名称。 行键是某个给定分区中实体的唯一标识符。 行键构成了实体主键的第二部分。 行键是一个最大为 1 KB 的字符串值。
批大小 批处理操作的记录数。 默认值 (100) 对大部分作业来说都已足够。 有关修改设置的详细信息,请参阅表批处理操作规范

服务总线队列

服务总线队列为一个或多个竞争使用方提供先入先出 (FIFO) 消息传递方式。 通常情况下,接收方会按照消息添加到队列中的临时顺序来接收并处理消息,并且每条消息仅由一个消息使用方接收并处理。

下表列出了用于创建队列输出的属性名称及其说明。

属性名称 说明
输出别名 该名称是在查询中使用的友好名称,用于将查询输出定向到此服务总线队列。
服务总线命名空间 服务总线命名空间是包含一组消息传递实体的容器。
队列名称 服务总线队列的名称。
队列策略名称 在创建队列时,还可以在“队列配置”选项卡上创建共享的访问策略。每个共享访问策略具有名称、所设权限以及访问密钥。
队列策略密钥 用于验证对服务总线命名空间的访问权限的共享访问密钥
事件序列化格式 输出数据的序列化格式。 支持 JSON、CSV 和 Avro。
编码 对于 CSV 和 JSON,目前只支持 UTF-8 这种编码格式
分隔符 仅适用于 CSV 序列化。 流分析支持大量的常见分隔符以对 CSV 格式的数据进行序列化。 支持的值为逗号、分号、空格、制表符和竖线。
格式 仅适用于 JSON 类型。 分隔行指定通过新行分隔各个 JSON 对象,从而格式化输出。 数组指定输出会被格式化为 JSON 对象的数组。

分区数基于服务总线 SKU 和大小。 分区键是每个分区的唯一整数值。

服务总线主题

服务总线队列提供的是从发送方到接收方的一对一通信方法,而服务总线主题提供的则是一对多形式的通信。

下表列出了用于创建表输出的属性名称及其说明。

属性名称 说明
输出别名 该名称是在查询中使用的友好名称,用于将查询输出定向到此服务总线主题。
服务总线命名空间 服务总线命名空间是包含一组消息传递实体的容器。 创建新的事件中心后,还创建了服务总线命名空间
主题名称 主题是消息传递实体,类似于事件中心和队列。 设计用于从多个不同的设备和服务收集事件流。 在创建主题时,还会为其提供特定的名称。 发送到主题的消息在创建订阅后才会提供给用户,因此请确保主题下存在一个或多个订阅
主题策略名称 创建主题时,还可以在“主题配置”选项卡上创建共享的访问策略。每个共享访问策略具有名称、所设权限以及访问密钥。
主题策略密钥 用于验证对服务总线命名空间的访问权限的共享访问密钥
事件序列化格式 输出数据的序列化格式。 支持 JSON、CSV 和 Avro。
编码 如果使用 CSV 或 JSON 格式,则必须指定一种编码格式。 目前只支持 UTF-8 编码格式
分隔符 仅适用于 CSV 序列化。 流分析支持大量的常见分隔符以对 CSV 格式的数据进行序列化。 支持的值为逗号、分号、空格、制表符和竖线。

分区数基于服务总线 SKU 和大小。 分区键是每个分区的唯一整数值。

Azure Cosmos DB

Azure Cosmos DB 是一种多区域分布的多模型数据库服务,它提供多区域不设限的弹性缩放、丰富查询和自动索引(经由与架构无关的数据模型)、可靠的低延迟及行业领先的综合 SLA。 若要了解流分析的 Cosmos DB 集合选项,请参阅将 Cosmos DB 用作输出的流分析一文。

Note

目前,Azure 流分析仅支持使用 SQL API 连接到 CosmosDB。 尚不支持使用其他 Azure Cosmos DB API。 如果使用其他 API 将 Azure 流分析指向 创建的 Azure Cosmos DB 帐户,则可能无法正确存储数据。

下表描述了用于创建 Azure Cosmos DB 输出的属性。

属性名称 说明
输出别名 用于在流分析查询中引用此输出的别名。
接收器 Cosmos DB
导入选项 选择“从订阅中选择 Cosmos DB”或“手动提供 Cosmos DB 设置”。
帐户 ID Cosmos DB 帐户的名称或终结点 URI。
帐户密钥 Cosmos DB 帐户的共享访问密钥。
数据库 Cosmos DB 数据库名称。
集合名称模式 要使用的集合的集合名称或其模式。
可以使用可选的 {partition} 令牌(其中分区从 0 开始)构造集合名称格式。 两个示例:
1. MyCollection - 必须存在一个名为“MyCollection”的集合。
2.MyCollection{partition} - 基于分区依据列。
分区依据列集合必须存在 -“MyCollection0”、“MyCollection1”、“MyCollection2”等。
分区键 可选。 仅当你在集合名称模式中使用 {partition} 令牌时,才需要此项。
分区键是输出事件中字段的名称,该字段用于指定跨集合分区输出的键。
对于单个集合输出,可使用任何任意输出列。 例如 PartitionId。
文档 ID 可选。 输出事件中的字段的名称,该字段用于指定插入或更新操作所基于的主键。

分区

下表汇总了分区支持,以及每个输出类型的输出写入器数目:

输出类型 分区支持 分区键 输出写入器数目
Azure SQL 数据库 不适用。
Azure Blob 存储 在 Path 模式中使用事件字段中的 {date} 和 {time} 标记。 选择日期格式,例如 YYYY/MM/DD、DD/MM/YYYY、MM-DD-YYYY。 HH 用于时间格式。 作为预览版的一部分,可以通过单个自定义事件属性 {fieldname} 或 {datetime:<specifier>} 对 blob 输出进行分区。 按照完全可并行化的查询的输入分区。
Azure 事件中心 按分区对齐方式变化。
输出事件中心分区键与上游(上一个)查询步骤相同时,编写器的数量与输出事件中心分区的数量相同。 各编写器使用 EventHub 的 EventHubSender class 将事件发送到特定分区。
输出事件中心分区键与上游(上一个)查询步骤不相同时,编写器的数量与之前步骤中的分区数量不相同。 各编写器使用 EventHubClient SendBatchAsync class 将事件发送到所有输出分区。
Azure 表存储 任何输出列。 按照完全并行化的查询的输入分区。
Azure 服务总线主题 自动选择。 分区数基于服务总线 SKU 和大小。 分区键是每个分区的唯一整数值。 与输出主题中的分区数量相同。
Azure 服务总线队列 自动选择。 分区数基于服务总线 SKU 和大小。 分区键是每个分区的唯一整数值。 与输出队列中的分区数量相同。
Azure Cosmos DB 在 Collection 命名模式中使用 {partition} 标记。 {partition} 值基于查询中的 PARTITION BY 子句。 按照完全并行化的查询的输入分区。

输出批大小

Azure 流分析使用大小可变的批来处理事件和写入到输出。 通常流分析引擎不会一次写入一条消息,而是使用批来提高效率。 输入和输出事件速率都很高时,它会使用更大的批。 输出速率低时,使用较小的批来保证低延迟。

下表介绍了输出批处理的一些注意事项:

输出类型 最大消息大小 批大小优化
Azure SQL 数据库 每个单次批量插入最大行数 10000
每个单次批量插入最小行数 100
另请参阅 Azure SQL 限制
每个批最初都以最大批大小来批量插入,并可能会根据来自 SQL 的可重试错误将批拆分为二(直到达到最小批大小)。
Azure Blob 存储 参阅 Azure 存储限制 最大 Blob 块大小为 4 MB
最大 blob 块计数为 50000
Azure 事件中心 每个消息 256 KB
另请参阅事件中心限制
输入输出分区不相同时,每个事件会分别打包到 EventData 中,并按批发送(批的大小不得超出最大消息大小,高级 SKU 的最大消息大小为 1 MB)。
输入输出分区相同时,多个事件打包到单个 EventData,以最大消息大小发送。
Azure 表存储 参阅 Azure 存储限制 默认为每个单一事务 100 个实体,并且可根据需要配置为更小的值。
Azure 服务总线队列 每个消息 256 KB
另请参阅服务总线限制
每个消息单一事件
Azure 服务总线主题 每个消息 256 KB
另请参阅服务总线限制
每个消息单一事件

后续步骤