Вывод данных из Azure Stream Analytics в хранилище BLOB-объектов или Azure Data Lake Storage 2-го поколения

Data Lake Storage 2-го поколения использует службу хранилища Azure в качестве основы для создания корпоративных хранилищ данных в Azure. Разработанное с целью обработки нескольких петабайт информации и с поддержкой сотен гигабит пропускной способности хранилище Data Lake Storage 2-го поколения позволяет с легкостью управлять огромным количеством данных. Основная часть Data Lake Storage 2-го поколения — это добавление иерархического пространства имен в хранилище BLOB-объектов.

Хранилище BLOB-объектов Azure предоставляет экономичное и масштабируемое решение для хранения в облаке больших объемов неструктурированных данных. Общие сведения о хранилище BLOB-объектов и его использовании см. в разделе Передача, скачивание и составление списка больших двоичных объектов с помощью портала Azure.

Примечание.

Дополнительные сведения о поведении, характерном для форматов AVRO и Parquet, см. в соответствующих разделах обзора.

Конфигурация выходных данных

В следующей таблице перечислены имена свойств и их описания для создания большого двоичного объекта или Azure Data Lake Storage 2-го поколения выходных данных.

Имя свойства Description
Псевдоним выходных данных Понятное имя, которое используется в запросах для направления выходных данных запроса в хранилище BLOB-объектов.
Storage account Имя учетной записи хранения, в которую отправляются выходные данные.
Ключ учетной записи хранения Секретный ключ, связанный с учетной записью хранения.
Контейнер Логическая группировка больших двоичных объектов, хранящихся в службе BLOB-объектов Azure. При передаче BLOB-объекта в службу BLOB-объектов для него необходимо указать контейнер.

Динамическое имя контейнера является необязательным. Он поддерживает один и только один динамический {field} в имени контейнера. Поле должно существовать в выходных данных и следовать политике имен контейнера.

Тип данных поля должен быть string. Чтобы использовать несколько динамических полей или объединить статический текст вместе с динамическим полем, его можно определить в запросе со встроенными строковыми функциями, такими как CONCAT, LTRIM и т. д.
Формат сериализации событий Формат сериализации для выходных данных. Поддерживаются форматы JSON, CSV, Avro и Parquet. Delta Lake указан здесь как вариант. Данные отображаются в формате Parquet, если выбран Delta Lake. Дополнительные сведения о Delta Lake
Имя разностного пути Требуется, если формат сериализации событий — Delta Lake. Путь, используемый для записи таблицы delta lake в указанном контейнере. Он содержит имя таблицы. Дополнительные сведения и примеры.
Режим записи Режим записи определяет способ записи Azure Stream Analytics в выходной файл. Точно один раз доставка происходит только в том случае, если режим записи — один раз. Дополнительные сведения см. в следующем разделе.
Столбец секционирования Необязательно. Имя {field} из выходных данных в секционирование. Поддерживается только один столбец секции.
Шаблон пути Требуется, если формат сериализации событий — Delta Lake. Шаблон пути к файлу, используемый для записи BLOB-объектов в указанном контейнере.

В шаблоне пути можно использовать один или несколько экземпляров переменных даты и времени, чтобы указать частоту записи больших двоичных объектов: {date}, {time}.

Если режим записи имеет значение "Один раз", необходимо использовать {date} и {time}.

Пользовательское секционирование большого двоичного объекта можно использовать для предварительной версии, указав одно пользовательское имя поля {field} из данных события. Имя поля может содержать буквы, цифры, дефисы и символы подчеркивания. Ограничения настраиваемых полей включают следующие:
  • Если режим записи имеет значение "Один раз", не допускается динамическое настраиваемое имя {field}.
  • Имена полей нечувствительны к регистру. Например, служба не может различать столбец и столбец IDid.
  • Вложенные поля не разрешены. Вместо этого используйте псевдоним в запросе задания для "сведения" поля.
  • В имени поля запрещено использовать выражения.

Этот компонент допускается использовать в пути конфигурации описателей пользовательских форматов даты и времени. Настраиваемые форматы даты и времени необходимо указывать по очереди, добавляя до и после ключевое слово {datetime:<specifier>}. <Спецификатор> принимает значения в следующих форматах: гггг, мм, М, дд, д, чч, Ч, мм, М, сс и с. Ключевое слово {datetime:<specifier>} можно использовать в одном пути несколько раз, формируя настраиваемые конфигурации даты и времени.

Примеры:
  • Пример 1: cluster1/logs/{date}/{time}
  • Пример 2: cluster1/logs/{date}
  • Пример 3: cluster1/{client_id}/{date}/{time}
  • Пример 4. cluster1/{datetime:ss}/{myField} Где выполняется запрос: SELECT data.myField AS myField FROM Input;
  • Пример 5: cluster1/year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

Метка времени создаваемой структуры папок соответствует времени UTC, а не местному времени. System.Timestamp — это время, используемое для всех секционирований на основе времени.

Именование файлов использует следующее соглашение:

{Шаблон префикса пути}/schemaHashcode_Guid_Number.extension

Здесь GUID обозначает уникальный идентификатор, назначаемый внутреннему модулю записи, который создается для записи в файл BLOB-объекта. Число здесь обозначает индекс блока BLOB-объекта.

Выходные файлы примера:
  • Myoutput/20170901/00/45434_gguid_1.csv
  • Myoutput/20170901/01/45434_gguid_1.csv

Дополнительные сведения об этом компоненте см. в статье Пользовательские шаблоны даты и времени в пути для выходных данных хранилища BLOB-объектов Azure Stream Analytics (предварительная версия).
Формат даты Требуется, если формат сериализации событий — Delta Lake. Если в префиксе пути используется маркер даты, вы можете выбрать формат даты для упорядочивания своих файлов. Пример: ГГГГ/ММ/ДД
Формат времени: Требуется, если формат сериализации событий — Delta Lake. Если в префиксе пути используется маркер времени, укажите формат времени для упорядочивания своих файлов.
Минимальное количество строк Количество минимальных строк на пакет. Для Parquet для каждого пакета создается новый файл. Текущее значение по умолчанию — 2000 строк, а допустимое максимальное — 10 000 строк.
Максимальное время Максимальное время ожидания на пакет. После этого пакет будет записан в выходные данные, даже если минимальные требования к строкам не выполнены. Текущее значение по умолчанию — 1 минута, а максимально допустимое — 2 часа. Если выходные данные большого двоичного объекта имеют частоту шаблона пути, время ожидания не может быть выше диапазона времени секции.
Кодировка Если используется формат CSV или JSON, необходимо указать формат кодирования. В настоящее время единственным поддерживаемым форматом кодировки является UTF-8.
Разделитель Применяется только для сериализации в формате CSV. Stream Analytics поддерживает множество общих разделителей для сериализации данных CSV. Поддерживаются такие разделители: запятая, точка с запятой, пробел, табуляция и вертикальная черта.
Формат Применяется только для сериализации в формате JSON. Вариант строки-разделители предусматривает форматирование выходных данных таким образом, что каждый объект JSON будет отделен новой строкой. Если выбрать вариант строки-разделители, то JSON считывает по одному объекту за раз. Весь контент сам по себе не будет допустимым JSON. Вариант массив означает, что выходные данные будут отформатированы как массив объектов JSON. Этот массив будет закрыт только в том случае, если выполнение задания будет остановлено или Stream Analytics перейдет в следующее временное окно. В общем рекомендуется использовать JSON-файл со строками-разделителями, так как для него не требуется никакой специальной обработки. При этом по-прежнему выполняется запись в выходной файл.

Точно после доставки (общедоступная предварительная версия)

Сквозная доставка ровно один раз при чтении любых входных данных потоковой передачи означает, что обработанные данные будут записываться в Azure Data Lake Storage 2-го поколения выходные данные один раз без дубликатов. Если эта функция включена, задание Stream Analytics гарантирует отсутствие потери данных и не дубликаты, создаваемые в качестве выходных данных, во время последнего выхода, инициированного пользователем. Это значительно упрощает конвейер потоковой передачи, не внедряя и устраняя неполадки логики дедупликации.

Режим записи

Существует два способа записи Stream Analytics в хранилище BLOB-объектов или учетную запись ADLS 2-го поколения. Один из них — добавить результаты в тот же файл или в последовательность файлов, в которых будут поступать результаты. Другой — записывать все результаты для секции времени, когда доступны все данные для секции времени. Когда режим записи включен, точно после включения доставки.

Для Delta Lake нет параметра режима записи. Однако выходные данные Delta lake также предоставляют точно один раз гарантии с помощью разностного журнала. Он не требует секции времени и будет непрерывно записывать результаты на основе параметров пакетной обработки, определенных пользователем.

Примечание.

Если вы предпочитаете не использовать функцию предварительной версии для точной доставки, нажмите кнопку "Добавить в качестве результатов".

Настройка

Чтобы получить точно один раз доставки для учетной записи хранилища BLOB-объектов или ADLS 2-го поколения, необходимо настроить следующие параметры:

  • Выберите один раз после того, как все результаты секции времени доступны для режима записи.
  • Укажите шаблон пути как {date}, так и {time}.
  • Укажите формат даты и времени.

Ограничения

  • Подпоток не поддерживается.
  • Шаблон пути становится обязательным свойством и должен содержать как {date}, так и {time}. Не разрешено динамическое настраиваемое имя {field}. Дополнительные сведения о шаблоне пользовательского пути.
  • Если задание запускается в пользовательское время до или после последнего времени вывода, возникает риск перезаписи файла. Например, если формат времени — HH, файл создается каждый час. Если вы остановите задание в 8:15 утра и перезапустите задание в 8:30 утра, файл, созданный от 8 утра до 9 утра, охватывает только данные от 8:30 до 9 утра. Данные от 8 утра до 8:15 утра теряются при перезаписи.

Выходные файлы BLOB-объектов

При использовании хранилища BLOB-объектов для выходных данных в большом двоичном объекте создается файл в следующих случаях:

  • Файл превышает максимально допустимое количество блоков (в настоящее время составляет 50 000). Максимальное количество блоков может быть достигнуто без превышения максимально допустимого размера большого двоичного объекта. Например, при высокой скорости вывода данных в блоке будет большее число байтов, значит, и размер файла будет большим. В случае низкой скорости вывода данных в каждом блоке будет меньше данных, а значит, и размер файла будет меньшим.
  • Существует изменение схемы в выходных данных, а формат выходных данных требует фиксированной схемы (CSV, Avro, Parquet).
  • Задание перезапущено пользователем, остановив его и запуская его, либо внутренне для обслуживания системы или восстановления ошибок.
  • Запрос полностью секционирован, и для каждой выходной секции создается новый файл. Это происходит от использования PARTITION BY или собственной параллелизации, введенной на уровне совместимости 1.2
  • Пользователь удаляет файл или контейнер учетной записи хранения.
  • Выходные данные секционируются с помощью шаблона префикса пути, а новый большой двоичный объект используется при переходе запроса к следующему часу.
  • Выходные данные секционируются настраиваемым полем, а новый большой двоичный объект создается на ключ секции, если он не существует.
  • Выходные данные секционируются настраиваемым полем, в котором ключ секции карта inality превышает 8000, а новый большой двоичный объект создается на ключ секции.

Секционирование

В шаблоне пути используйте для ключа секционирования маркеры {date} и {time} из полей событий. Выберите формат даты, например ГГГГ-ММ-ДД, ДД-ММ-ГГГГ, ММ-ДД-ГГГГ. Для времени используется формат ЧЧ. Выходные данные BLOB-объектов можно разделять одним настраиваемым атрибутом события {fieldname} или {datetime:<specifier>}. Количество модулей записи для выходных данных соответствует числу секций входных данных, если запросы полностью параллелизуемы.

Размер выходного пакета

Максимальный размер сообщения см. в статье Ограничения службы хранилища Azure. Максимальный размер одного блока BLOB-объекта составляет 4 МБ, а максимальное число блоков BLOB-объектов — 50 000.

Ограничения

  • Если символ / косой черты вперед используется в шаблоне пути (например, /folder2/folder3), создаются пустые папки и они не отображаются в Обозреватель службы хранилища
  • Azure Stream Analytics добавляется к тому же файлу в случаях, когда новый файл BLOB-объектов не нужен. Это может привести к созданию дополнительных триггеров, если службы Azure, такие как Сетка событий, настроены для активации при обновлении файла BLOB-объектов.
  • Azure Stream Analytics добавляется к большому двоичному объекту по умолчанию. Если выходной формат является массивом JSON, он завершает файл при завершении работы или когда выходные данные переходят в следующий раздел времени для секционированных выходных данных по времени. В некоторых случаях, таких как нечистый перезапуск, возможно, закрытие "]" для массива JSON отсутствует.

Следующие шаги