Запрос Stream Analytics (выберите * в выводе)(исключить определенные столбцы)

У меня есть запрос, как;

SELECT
*
INTO [documentdb]
FROM
    [iothub] 
TIMESTAMP BY eventenqueuedutctime

Мне нужно использовать *, потому что данные являются динамическими и не имеют конкретной схемы. Проблема в том, что данные системы Iothub записываются в documentdb в этом запросе. Есть ли способ исключить данные системной информации Iothub?

Благодарю.

2 ответа

Это невозможно в настоящее время, но это будет возможно на уровне совместимости заданий 1.2 в ближайшем будущем. На данный момент одним из обходных путей является то, что вы можете создать триггер пост-создания в Cosmos DB, чтобы удалить это свойство из документа.

Как сказал @chetangm в своем ответе, такой механизм фильтрации пока не поддерживается в ASA. Да, вы могли бы использовать create trigger в dos космоса, однако это должно быть вызвано в коде SDK или API остальных. Он не будет запущен автоматически.

Я предоставляю вам еще один обходной путь, при котором с помощью функции Azure Cosmos DB запускается. Он может выполняться при добавлении или изменении данных в Azure Cosmos DB. Вам просто нужно удалить ненужные поля в коде функции.

Надеюсь, это поможет вам.

Чтобы ответить на ваш вопрос, служба потоковой аналитики Azure не имеет встроенной поддержки для исключения столбцов из динамических данных (информация iothub). Но мы можем добиться этого с помощью UDF. Вот дополнительная информация об UDF.

UDF может помочь нам удалить столбец из входных данных и вернуть нам обновленный файл json.

Для этого есть два основных шага:

  1. Создайте UDF JavaScript.

    • Перейдите к функциям с левой стороны навигации (под входами).
    • Щелкните Добавить -> JavaScript UDF.
    • Задайте псевдоним функции = removeiothubinfo
    • сохранить тип вывода - любой.
    • скопируйте и вставьте следующий код в определение функции.

      function main(input) {
        delete input['IoTHub'];
        return input;
      }
      

      Нажмите на Сохранить

  2. Обновить запрос

    • Перейдите в режим запроса и скопируйте и вставьте следующий запрос:

      WITH NewInput AS
      (
      SELECT
          udf.removeiothubinfo(iothub) AS UpdatedJson
      FROM
          [iothub]
      )
      SELECT
          UpdatedJson.*
      INTO
          [documentdb]
      FROM
          NewInput
      

      Нажмите на Сохранить

Я предлагаю вам протестировать свой запрос перед запуском задания, загрузив образец файла, содержащий аналогичную структуру для json.

Отредактировано

Кроме того, даже на уровне совместимости заданий 1.2 не было дополнительных функций для достижения этой цели. Проверьте это для получения дополнительной информации.

Другие вопросы по тегам