GetMetadataPropertyValue (Azure 流分析)

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

适配器元数据属性

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

注意

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

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

  • EventEnqueuedUtcTime
  • EventProcessedUtcTime
  • PartitionId
  • Offset
  • SequenceNumber
  • PartitionKey
  • 发布者,如果传入事件中可用

示例:

从事件中心检索 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
  • PartitionId

示例 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 之前重命名 origial 有效负载字段。 如果有效负载字段名称与系统元数据字段名称相同,则会被覆盖。

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