【问题标题】:Azure Stream Analytics GetMetadataPropertyValue not workingAzure 流分析 GetMetadataPropertyValue 不起作用
【发布时间】:2018-10-21 11:18:53
【问题描述】:

我有一个模拟物联网设备的 .net 应用程序。它使用 Microsoft.Azure.Devices.Client 创建设备消息并将它们发送到 iothub,然后将它们路由到 Azure 流分析将其作为输入的事件中心。

我在“模拟器”中有以下内容:

  messageToSend = new Message(Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(message.Payload)))
                 {
                   MessageId = new Guid().ToString(),
                   ContentType = "application/json",
                   ContentEncoding = "utf-8",
                 };
                 messageToSend.Properties.Add("test", "test");

在我的天蓝色流分析查询中,我有:

SELECT *, GetMetadataPropertyValue(InputEH, '[User].[test]') as test
INTO OutputEH 
FROM InputEH
WHERE test = 'test' 

由于某种原因,查询从不向 OutputEH 输出任何数据。我尝试了相同的查询,除了我没有将“test”属性添加到 MessageProperties 中,而是将它放在消息正文中,如果我的查询使用“WHERE InputEh.test = 'test'”,它会按预期工作

为了验证属性,我将输出设置为一个 eventthub,并在其上设置一个事件中心处理器,如果我删除“WHERE”子句,则当消息进入时。在事件中心处理器中,标头似乎已被删除,这告诉我 ASA 出于某种原因正在删除标头。

不知道我在这里做错了什么。任何帮助将不胜感激。

【问题讨论】:

    标签: azure azure-iot-hub azure-stream-analytics


    【解决方案1】:

    对于遇到此“问题”的其他任何人,您也可以通过执行以下操作来获得您想要的:

    WITH AllData AS (
        SELECT
            utctime, 
            GetMetadataPropertyValue(EventHubInput, '[User].[StreamID]') as streamid, 
            GetMetadataPropertyValue(EventHubInput, '[User].[CustomerID]') as customerid, 
            message
        FROM
            EventHubInput timestamp by utcTime
    )
    
    SELECT *
    INTO EventOutput
    FROM AllData
    WHERE customerId = '<some value>' and streamId = '<some other value>'
    

    【讨论】:

      【解决方案2】:

      在您的上一篇文章中,GetMetadataPropertyValue(input, '[User].[test]') 为空,test 也为空。因此,在查询字符串中,where 部分始终为真,这意味着它将把 InputEH 中的所有数据输出到 OutputEH。 此外,您需要使用来自 EventHub 的实时数据来测试运行作业的时间。

      【讨论】:

      • User.Test 通过设置消息属性在命令行程序中设置,因此它不为空。此外,正如我所说,我将事件中心处理器连接到事件中心的另一端以验证数据。
      【解决方案3】:

      原来问题出在查询中。 GetMetaDataPropertyValue() 有效,但不像 MSDN @GetMetaDataPropertyValue 上描述的那样。我必须将该方法移动到我的 where 子句中才能使其成功运行。所以现在我的查询如下:

      SELECT *
      INTO OutputEH 
      FROM InputEH as input
      WHERE GetMetadataPropertyValue(input, '[User].[test]') = test
      

      我不确定为什么在 SELECT 子句中这样做不起作用,但这对我有用。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      相关资源
      最近更新 更多