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。