事件网格数据连接

事件网格引入是用于侦听 Azure 存储并在订阅事件发生时更新 Azure 数据资源管理器以提取信息的管道。 Azure 数据资源管理器使用 Azure 事件网格订阅从 Azure 存储(blob 存储和 ADLSv2)持续引入 blob 创建或重命名的通知,并通过 Azure 事件中心将这些通知流式传输到 Azure 数据资源管理器。

事件网格引入管道需要完成几个步骤。 在 Azure 数据资源管理器中创建目标表,将特定格式的数据引入到该表中。 然后在 Azure 数据资源管理器中创建事件网格数据连接。 事件网格数据连接需要知道事件路由信息,例如要将数据发送到的表和表映射。 还可以指定引入属性,这些属性描述要引入的数据、目标表和映射。 可以生成示例数据并上传 blob重命名 blob 以测试连接。 在导入后删除 blob

可以通过 Azure 门户、使用引入向导、使用 C#Python 以编程方式或使用 Azure 资源管理器模板来管理“事件网格”引入。

有关 Azure 数据资源管理器中数据引入的常规信息,请参阅 Azure 数据资源管理器数据引入概述

Azure 数据资源管理器数据连接身份验证机制

注意

如果从数据源中删除托管标识权限,会禁用数据连接,从而无法从数据源提取数据。

  • 基于密钥的数据连接:如果未在数据连接中指定托管标识,则连接会自动默认使用基于密钥的身份验证。 基于密钥的连接使用资源连接字符串(如 Azure事件中心连接字符串)提取数据。 Azure 数据资源管理器为指定的资源生成资源连接字符串,并将其安全地保存在数据连接中。 该连接字符串之后用于从数据源提取数据。

注意

如果轮换了密钥,会禁用数据连接,从而无法从数据源提取数据。 若要解决此问题,请更新或重新创建数据连接。

数据格式

  • 请参阅支持的格式
  • 请参阅支持的压缩
    • 原始的未压缩数据大小应该是 blob 元数据的一部分,否则 Azure 数据资源管理器会对其进行估算。 每个文件的引入未压缩大小限制为 6 GB。

注意

可以在 BlobStorageStorageV2Data Lake Storage Gen2 的 Azure 存储帐户上设置事件网格通知订阅。

引入属性

可以通过 blob 元数据指定 blob 引入的引入属性。 可以设置以下属性:

属性 说明
rawSizeBytes 原始(未压缩的)数据的大小。 对于 Avro/ORC/Parquet,此值是应用特定于格式的压缩之前的大小。 请通过将此属性设置为未压缩数据大小(以字节为单位)来提供原始数据大小。
kustoDatabase 目标数据库的名称,区分大小写。 默认情况下,数据将引入到与数据连接关联的目标数据库中。 使用此属性重写默认数据库,并将数据发送到其他数据库。 为此,必须先将连接设置为多数据库连接
kustoTable 现有目标表的名称,区分大小写。 替代“Data Connection”窗格上设置的“Table”。
kustoDataFormat 数据格式。 替代“Data Connection”窗格上设置的“Data format”。
kustoIngestionMappingReference 要使用的现有引入映射的名称。 替代“Data Connection”窗格上设置的“Column mapping”。
kustoIgnoreFirstRecord 如果设置为 true,则 Kusto 将忽略 Blob 的第一行。 在表格格式数据(CSV、TSV 或类似格式)中使用将忽略标题。
kustoExtentTags 字符串,表示将附加到生成的盘区的标记
kustoCreationTime 替代 blob 的 盘区创建时间,格式为 ISO 8601 字符串。 用于回填。

事件路由

在与群集建立数据连接时,请指定要将引入的数据发送到何处的路由。 默认路由是发送到与目标数据库关联的连接字符串中指定的目标表。 数据的默认路由也称为静态路由。 可以使用事件数据属性为数据指定备用路由。

将事件数据路由到备用数据库

默认已禁用将数据路由到备用数据库。 若要将数据发送到其他数据库,必须先将连接设置为多数据库连接。 可以在 Azure 门户、C#、Python 或 ARM 模板中执行此操作。 用于允许数据库路由的用户、组、服务主体或托管标识在群集上必须至少具有参与者角色和写入权限。 有关详细信息,请参阅为 Azure 数据资源管理器创建事件网关数据连接

若要指定备用数据库,请设置数据库引入属性

警告

如果指定了备用数据库,而未将连接设置为多数据库数据连接,则会导致引入失败。

将事件数据路由到备用表

设置到 Azure 数据资源管理器群集的 blob 存储连接时,请指定目标表属性:

  • 表名称
  • 数据格式
  • mapping

还可以使用 blob 元数据指定每个 blob 的目标表属性。 将按照引入属性指定的方式动态路由数据。

以下示例演示如何在上传 Blob 元数据之前对其设置引入属性。 Blob 路由到不同的表。

此外,可以指定目标数据库。 事件网格数据连接是在特定数据库的上下文中创建的。 因此,此数据库是数据连接的默认数据库路由。 若要将数据发送到其他数据库,请设置“KustoDatabase”引入属性,并将数据连接设置为多数据库数据连接。 默认已禁用将数据路由到另一数据库(不允许)。 设置与数据连接数据库不同的数据库引入属性且不允许数据路由到多个数据库(将连接设置为多数据库数据连接)会导致引入失败。

有关详细信息,请参阅上传 blob

var container = new BlobContainerClient("<storageAccountConnectionString>", "<containerName>");
await container.CreateIfNotExistsAsync();
var blob = container.GetBlobClient("<blobName>");
// Blob is dynamically routed to table `Events`, ingested using `EventsMapping` data mapping
await blob.SetMetadataAsync(
    new Dictionary<string, string>
    {
        { "rawSizeBytes", "4096" }, // the uncompressed size is 4096 bytes
        { "kustoTable", "Events" },
        { "kustoDataFormat", "json" },
        { "kustoIngestionMappingReference", "EventsMapping" },
        { "kustoDatabase", "AnotherDB" }
    }
);
await blob.UploadAsync(BinaryData.FromString(File.ReadAllText("<filePath>")));

上传 Blob

可以从本地文件创建 blob,将引入属性设置到 blob 元数据,然后上传它。 如需示例,请参阅使用事件网格数据连接

注意

  • 强烈建议使用 BlockBlob 生成数据,因为使用 AppendBlob 可能会导致意外行为。
  • 使用 Azure Data Lake Gen2 存储 SDK 需要使用 CreateFile 上传文件,最后使用 Flush 并将 close 参数设置为 true。 有关 Data Lake Gen2 SDK 正确用法的详细示例,请参阅使用事件网格数据连接
  • 启用了分层命名空间功能的存储帐户不支持在 CopyBlob 操作后触发引入。
  • 如果事件中心终结点未确认收到事件,Azure 事件网格将激活重试机制。 如果此重试发送失败,事件网格可以使用“死信”过程将未送达的事件发送给存储帐户。 有关详细信息,请参阅事件网格消息传递和重试

重命名 blob

使用 ADLSv2 时,可以重命名 blob 以触发到 Azure 数据资源管理器的 blob 引入。 例如,请参阅重命名 blob

注意

  • 可以在 ADLSv2 中重命名目录,但不会触发“已重命名 blob”事件,也不会在目录中引入 blob。 若要在重命名后引入 blob,请直接重命名所需的 blob。
  • 如果在创建数据连接时,或者在手动创建事件网格资源时将筛选器定义为跟踪特定主题,则这些筛选器将应用于目标文件路径。

使用存储生命周期删除 blob

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

已知事件网格问题

  • 使用 Azure 数据资源管理器导出用于事件网格引入的文件时,请注意:
    • 如果提供给导出命令的连接字符串或提供给外部表的连接字符串是 ADLS Gen2 格式的连接字符串(例如 abfss://filesystem@accountname.dfs.core.chinacloudapi.cn),但没有为分层命名空间启用存储帐户,则不会触发事件网格通知。
    • 如果没有为分层命名空间启用该帐户,则连接字符串必须使用 Blob 存储格式(例如 https://accountname.blob.core.chinacloudapi.cn)。 即使使用 ADLS Gen2 连接字符串,导出也可以按预期工作,但是不会触发通知,并且事件网格引入也不会进行。