通过订阅事件网格通知将 Blob 引入 Azure 数据资源管理器

Azure 数据资源管理器是一项快速且高度可缩放的数据探索服务,适用于日志和遥测数据。 Azure 数据资源管理器提供了从事件中心、IoT 中心和写入 blob 容器的 blob 引入数据(数据加载)的功能。

本文介绍如何使用事件网格数据连接将 blob 从存储帐户引入到 Azure 数据资源管理器。 你将创建一个用于设置 Azure 事件网格订阅的事件网格数据连接。 事件网格订阅通过 Azure 事件中心将事件从存储帐户路由到 Azure 数据资源管理器。 然后将看到展示整个系统中数据流的示例。

有关如何从事件网格引入 Azure 数据资源管理器的一般信息,请参阅连接到事件网格。 若要在 Azure 门户中手动创建资源,请参阅手动创建资源以实现事件网格引入

必备条件

在 Azure 数据资源管理器中创建目标表

在 Azure 数据资源管理器中创建一个表,Azure 事件中心会向该表发送数据。 在“先决条件”中准备好的群集和数据库中创建表。

  1. 在 Azure 门户中的群集下,选择“查询”

    Screenshot of the Query option in the Azure portal.

  2. 将以下命令复制到窗口中,然后选择“运行”以创建将接收引入数据的表 (TestTable)。

    .create table TestTable (TimeStamp: datetime, Value: string, Source:string)
    

    Run command create table.

  3. 将以下命令复制到窗口中,然后选择“运行”将传入的 JSON 数据映射到表 (TestTable) 的列名和数据类型。

    .create table TestTable ingestion json mapping 'TestMapping' '[{"column":"TimeStamp","path":"$.TimeStamp"},{"column":"Value","path":"$.Value"},{"column":"Source","path":"$.Source"}]'
    

创建事件网格数据连接

现在将存储帐户连接到 Azure 数据资源管理器,以便将流入存储的数据流式传输到测试表。 此连接可以在 Azure 门户中的存储帐户下创建,也可以在 Azure 门户中的 Azure 数据资源管理器下创建。

  1. 在创建的群集下,选择“数据库”“TestDatabase”。

    Select test database.

  2. 选择“数据引入”“添加数据连接”。

    Add data connection for data ingestion.

数据连接 -“基本信息”选项卡

  1. 选择连接类型:Blob 存储。

  2. 使用以下信息填写窗体:

    Fill out Event Grid form with connection basics.

    设置 建议的值 字段说明
    数据连接名称 test-grid-connection 要在 Azure 数据资源管理器中创建的连接的名称。
    存储帐户订阅 订阅 ID 存储帐户所在的订阅 ID。
    存储帐户 gridteststorage1 前面创建的存储帐户的名称。
    事件类型 “已创建 Blob”或“已重命名 Blob” 触发引入的事件类型。 “已重命名 Blob”仅支持 ADLSv2 存储。 支持的类型为:Microsoft.Storage.BlobCreated 或 Microsoft.Storage.BlobRenamed。
    资源创建 自动 定义是否希望 Azure 数据资源管理器为你创建事件网格订阅、事件中心命名空间和事件中心。 若要手动创建资源,请参阅手动创建资源以实现事件网格引入
  3. 如果要跟踪特定主题,请选择“筛选器设置”。 按如下所述设置通知筛选器:

    • 前缀字段是主题的文本前缀。 由于应用的模式是 startswith,因此可以跨越多个容器、文件夹或 blob 应用。 不允许通配符。
      • 若要在 Blob 容器上定义筛选器,必须按如下所示设置字段:
      • 若要在 Blob 前缀(或 Azure Data Lake Gen2 中的文件夹)上定义筛选器,必须按如下所示设置字段:
    • “后缀”字段是 Blob 的文本后缀。 不允许通配符。
    • “区分大小写”字段指示前缀和后缀筛选器是否区分大小写
    • 有关筛选事件的详细信息,请参阅 blob 存储事件

    Filter settings Event Grid.

  4. 选择“下一步:引入属性”。

数据连接 - 引入属性选项卡

  1. 使用以下信息填写窗体。 表和映射名称区分大小写:

    Review and create table and mapping ingestion properties.

    引入属性:

    设置 建议的值 字段说明
    允许将数据路由到其他数据库(多数据库数据连接) 不允许 若要重写与数据连接关联的默认目标数据库,请启用此选项。 有关数据库路由的详细信息,请参阅事件路由
    表名 TestTable 在“TestDatabase”中创建的表。
    数据格式 JSON 支持的格式有 Avro、CSV、JSON、MULTILINE JSON、ORC、PARQUET、PSV、SCSV、SOHSV、TSV、TXT、TSVE、APACHEAVRO、RAW 和 W3CLOG。 支持的压缩选项为 Zip 和 Gzip。
    映射 TestMapping 在 TestDatabase 中创建的映射,它将传入的 JSON 数据映射到 TestTable 的列名称和数据类型。
    高级设置 我的数据具有标头 忽略标头。 支持 *SV 类型文件。

    注意

    无需指定所有默认路由设置。 部分设置也是接受的。

  2. 选择“下一步: 查看 + 创建”

数据连接 - “查看 + 创建”选项卡

  1. 查看自动创建的资源,并选择“创建”。

    Review and create data connection for Event Grid.

部署

等待部署完成。 如果部署失败,请在失败阶段的旁边选择“操作详细信息”,获取有关失败原因的详细信息。 选择“重新部署”,再次尝试部署资源。 你可以在部署之前修改参数。

Deploy Event Grid resources.

生成示例数据

连接 Azure 数据资源管理器和存储帐户后,可以创建示例数据。

将 Blob 上传到存储容器

我们将使用一个小型 shell 脚本,该脚本会发出一些基本的 Azure CLI 命令来与 Azure 存储资源交互。 此脚本执行以下操作:

  1. 在存储帐户中创建一个新容器。
  2. 将一个现有文件(作为 Blob)上传到该容器。
  3. 列出容器中的 Blob。

将数据保存到某个文件,然后使用以下脚本上传该文件:

{"TimeStamp": "1987-11-16 12:00","Value": "Hello World","Source": "TestSource"}
#!/bin/bash
### A simple Azure Storage example script

    export AZURE_STORAGE_ACCOUNT=<storage_account_name>
    export AZURE_STORAGE_KEY=<storage_account_key>

    export container_name=<container_name>
    export blob_name=<blob_name>
    export file_to_upload=<file_to_upload>
    export destination_file=<destination_file>

    echo "Creating the container..."
    az storage container create --name $container_name

    echo "Uploading the file..."
    az storage blob upload --container-name $container_name --file $file_to_upload --name $blob_name --metadata "rawSizeBytes=1024"

    echo "Listing the blobs..."
    az storage blob list --container-name $container_name --output table

    echo "Done"

注意

若要达到最佳引入性能,必须提供为引入提交的已压缩的 Blob 的未压缩大小。 因为事件网格通知仅包含基本详细信息,所以必须显示传达大小信息。 未压缩的大小信息可以通过使用未压缩的数据大小(以字节为单位)设置 Blob 元数据的 rawSizeBytes 属性来提供。

重命名 Blob

如果要从 ADLSv2 存储引入数据,并且已将“blob 已重命名”定义为数据连接的事件类型,则 blob 引入的事件触发器为“blob 重命名”。 若要重命名 blob,请导航到 Azure 门户中的 blob,右键单击该 blob 并选择“重命名”:

Rename blob in Azure portal.

引入属性

可以通过 blob 元数据指定 blob 引入的引入属性

注意

Azure 数据资源管理器在引入后不会删除 blob。 将 blob 保留三到五天。 请使用 Azure Blob 存储生命周期来管理 blob 删除。

查看数据流

注意

Azure 数据资源管理器具有用于数据引入的聚合(批处理)策略,旨在优化引入过程。 默认情况下,该策略配置为 5 分钟。 以后可根据需要更改该策略。 在本文中,预期会发生几分钟的延迟。

  1. 在 Azure 门户中的事件网格下,可以看到应用运行时的活动高峰。

    Activity graph for Event Grid.

  2. 若要检查到目前为止已向数据库发送的消息数,请在测试数据库中运行以下查询。

    TestTable
    | count
    
  3. 若要查看消息的内容,请在测试数据库中运行以下查询。

    TestTable
    

    结果集应如下图所示:

    Message result set for Event Grid.

清理资源

如果不打算再次使用事件网格,请清理系统为你自动创建的事件网格订阅、事件中心命名空间和任何事件中心,以免产生费用。

  1. 在 Azure 门户中,转到左侧菜单,然后选择“所有资源”。

    Select all resources for Event Grid cleanup.

  2. 搜索事件中心命名空间,然后选择“删除”以将其删除:

    Clean up Event Hubs namespace.

  3. 在“删除资源”窗体中,确认删除以删除事件中心命名空间和事件中心资源。

  4. 转到存储帐户。 在左侧菜单中,选择“事件”:

    Select events to clean up for Event Grid.

  5. 在图形下方,选择事件网格订阅,然后选择“删除”以将其删除:

    Delete Event Grid subscription.

  6. 若要删除事件网格数据连接,请转到 Azure 数据资源管理器群集。 在左侧菜单中选择“数据库”。

  7. 选择数据库“TestDatabase”:

    Select database to clean up resources.

  8. 在左侧菜单中,选择“数据引入”:

    Select data ingestion to clean up resources.

  9. 选择数据连接“test-grid-connection”,然后选择“删除”以将其删除。

后续步骤