GetMetadataPropertyValue

✅ Azure 流分析 ✅ 构造事件流

查询特定属性的输入数据。 有三种类型的属性:Adapter、User 和 Unique EventId。

适配器元数据属性

GetMetadataPropertyValue 函数可以访问某些特定于输入的属性。 此外,所有属性都可以作为单个记录进行访问。

注释

目前,无法在 Azure 门户中测试此函数(它将返回空结果)。 可以使用 Visual Studio Code 的 ASA 扩展通过 实时数据在查询中测试此函数。

事件中心的默认元数据属性

  • EventEnqueuedUtcTime
  • EventProcessedUtcTime
  • 分区ID
  • 抵消
  • SequenceNumber
  • 分区键
  • 发布者,在传入事件中可用时

例子:

从事件中心检索 EventEnqueuedUtcTime:

SELECT GetMetadataPropertyValue(ehInput, '[EventHub].[EventEnqueuedUtcTime]') AS mytime FROM ehInput

SELECT GetMetadataPropertyValue(ehInput, 'EventHub') AS myEHPropertiesRecord FROM ehInput

路由到事件中心终结点时的 IoT 中心属性

使用 IoT 中心路由功能到事件中心终结点时,可以通过从事件中心读取属性来获取元数据属性。 在这种情况下,可以检索到的以下属性:

  • IoTConnectionDeviceId
  • IoTAuthMethod
  • IoTAuthGenerationId
  • IoTEnqueueTime
  • IoTMessageSource
  • IoTConnectionModuleId
  • IoTInterfaceName

示例:SELECT GetMetadataPropertyValue(ehInput, '[EventHub].[IoTConnectionDeviceId]') AS myIoTDeviceId FROM ehInput

可以通过用户属性检索通过 IoT 中心消息扩充添加的属性。

IoT 中心的默认元数据属性

  • ConnectionDeviceId

  • AuthMethod

  • AuthGenerationId

  • EnqueueTime

  • MessageSource

  • ConnectionModuleId

  • InterfaceName

  • CorrelationId

  • MessageId

  • ConnectionDeviceGenerationId

例子:

从 IoT 中心检索 EnqueuedTime:

SELECT GetMetadataPropertyValue(iotInput, 'IoTHub.EnqueuedTime') AS myEnqueuedTime FROM iotInput

SELECT GetMetadataPropertyValue(iotInput, 'IoTHub') AS iotRecord FROM iotInput

Blob 输入的默认元数据属性:

  • BlobName
  • BlobLastModifiedUtcTime
  • 分区ID

示例 SELECT GetMetadataPropertyValue(blobInput, 'BlobName') AS myBlobName FROM blobInput

用户属性

可以使用 GetMetadataPropertyValue 访问传入 EventHub/IoT/Blob 消息上名为 SenderClientId 的自定义用户属性,如以下示例所示。

此外,还可以使用 GetMetadataPropertyValue 检索使用 IoT 中心消息扩充添加的孪生属性和扩充属性。

例子

若要从事件中心输入进行查询,请执行以下作:
SELECT Name, GetMetadataPropertyValue(ehInput, '[User].[SenderClientId]') FROM ehInput

若要从 IoT 中心输入进行查询,请执行以下作:
SELECT Name, GetMetadataPropertyValue(iotInput, '[User].[SenderClientId]') FROM iotInput

若要从 Blob 输入进行查询,
SELECT Name, GetMetadataPropertyValue(blobInput, '[User].[SenderClientId]') FROM blobInput

若要将所有用户属性作为记录获取,

对于事件中心:
SELECT Name, GetMetadataPropertyValue(ehInput, '[User]') AS userprops FROM ehInput

对于 IoT 中心:
SELECT Name, GetMetadataPropertyValue(iotInput, '[User]') AS userprops FROM iotInput

对于 Blob 输入:
SELECT Name, GetMetadataPropertyValue(blobInput, '[User]') AS userprops FROM blobInput

Unique EventId 属性

EventId 属性为输入事件创建唯一 ID (Guid),这对于主键用途非常有用。 EventId 是一致的(不是随机的);如果及时返回并重新读取相同的输入事件,流分析将生成相同的 ID。

示例:

SELECT GetMetadataPropertyValue(ehInput, 'EventId') AS eventPrimaryKey FROM ehInput

局限性与限制

GetMetadataPropertyValue 具有以下用法限制:

  • SELECT * 查询中使用会导致重复列。 若要防止重复列,请在 SELECT 语句中单独列出列。

  • 无论查询中使用的大小写如何,提供元数据属性值的别名都将小写。 例如, SELECT GetMetadataPropertyValue(ehInput, 'EventId') AS eventPrimaryKey 输出为 eventprimarykey. 若要保留大小写,请使用兼容性级别 1.2。

  • 此函数在 Azure 门户预览结果窗格中不起作用,包括测试查询函数。

  • 在数据到达 ASA 之前重命名组织有效负载字段。 如果有效负载字段名称与系统元数据字段名称相同,则将被覆盖。

  • 不支持 EventHub 事件元数据的 MessageId 和 CorrelationId。