Azure Stream Analytics GetMetadataPropertyValue не работает - PullRequest
0 голосов
/ 11 мая 2018

У меня есть приложение .net, имитирующее устройство iot.Он использует Microsoft.Azure.Devices.Client для создания сообщений устройства и отправки их на iothub, который затем направляет их в концентратор событий, где Azure Stream Analytics имеет его в качестве входных данных.

У меня есть следующее в"simulator":

  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");

В моем запросе Azure Stream Analytics у меня есть:

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

По какой-то причине запрос никогда не выводит никаких данных в OutputEH.Я попробовал тот же запрос, за исключением того, что вместо добавления свойства «test» в свойства MessageProperties я поместил его в тело сообщения, и он работает, как и ожидалось, если мой запрос использует «WHERE InputEh.test = 'test'"

Чтобы проверить свойства, я установил вывод в концентратор событий и настроил на нем процессор концентратора событий, а также, когда приходят сообщения, если я удалю предложение «ГДЕ».В процессоре концентратора событий кажется, что заголовки были удалены, это говорит мне, что ASA по какой-то причине отбрасывает заголовки.

Не уверен, что я делаю здесь неправильно.Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

В вашем последнем сообщении GetMetadataPropertyValue(input, '[User].[test]') равно нулю, а test также равно нулю.Таким образом, в строке запроса секция , где всегда верна, и это означает, что она выведет все данные из InputEH в OutputEH.И еще, вам нужно проверить, когда вы запускаете задание, используя живые данные из EventHub.

0 голосов
/ 18 марта 2019

Для всех, кто сталкивается с этой «проблемой», вы также можете получить то, что хотите, выполнив что-то вроде этого:

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>'
0 голосов
/ 11 мая 2018

Оказывается, проблема была в запросе.GetMetaDataPropertyValue () работает, но не так, как описано в MSDN @ GetMetaDataPropertyValue .Мне пришлось переместить метод в мое предложение where, чтобы он работал успешно.Итак, теперь мой запрос выглядит следующим образом:

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

Я не уверен, почему выполнение этого в предложении SELECT не работает, но это сработало для меня.

...