✅ 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。