Azure Stream Analytics: запись данных в таблицу Delta Lake

Delta Lake — это открытый формат, который обеспечивает надежность, качество и производительность озера данных. Вы можете использовать Azure Stream Analytics для непосредственной записи потоковых данных в таблицы Delta Lake без написания одной строки кода.

Задание Stream Analytics можно настроить для записи с помощью встроенного соединителя вывода Delta Lake в новую или уже созданную таблицу Delta в учетной записи Azure Data Lake Storage 2-го поколения. Этот соединитель оптимизирован для высокоскоростной передачи данных в таблицы Delta в режиме добавления. Он также обеспечивает семантику ровно один раз, которая гарантирует, что данные не будут потеряны или продублированы. Прием потоков данных в режиме реального времени из Центры событий Azure в таблицы Delta позволяет выполнять нерегламентную интерактивную или пакетную аналитику.

Конфигурация Delta Lake

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

Имя свойства Описание
Формат сериализации событий Формат сериализации для выходных данных. Поддерживаются форматы JSON, CSV, Avro и Parquet. Delta Lake указан здесь как вариант. Данные находятся в формате Parquet, если выбран Delta Lake.
Имя Delta Path Путь, используемый для записи таблицы Delta Lake в указанном контейнере. Он содержит имя таблицы. Дополнительные сведения см. в следующем разделе.
Столбец секционирования Необязательно. Имя из ваших выходных данных для секционирования. Поддерживается только один столбец партиции. Значение столбца должно иметь тип string.

Полный список конфигураций Data Lake Storage 2-го поколения см. в Azure Data Lake Storage 2-го поколения обзор.

Имя Delta Path

Имя пути Delta используется для указания расположения и имени вашей таблицы Delta Lake, хранящейся в Data Lake Storage 2-го поколения.

Чтобы определить путь к таблице Delta и имени таблицы Delta, можно использовать один или несколько сегментов пути. Сегмент пути — это строка между последовательными символами разделителя (например, косой чертой /), соответствующей имени виртуального каталога.

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

Ограничения на имя пути Delta включают:

  • Имена полей не учитывает регистр. Например, служба не может различать столбцы ID и id.
  • Динамическое {field} имя не разрешено. Например, {ID} обрабатывается как текст {ID}.
  • Число сегментов пути, составляющих имя, не может превышать 254.

Примеры

Примеры для имени пути Delta:

  • Пример 1: WestUS/CA/factory1/device-table
  • Пример 2: Test/demo
  • Пример 3: mytable

Выходные файлы примера:

  1. Под выбранным контейнером путь к каталогу - WestEurope/CA/factory1, а имя папки Delta-таблицы - device-table.
  2. В выбранном контейнере путь к каталогу — Test, а папка "Delta table" называется demo.
  3. В выбранном контейнере имя папки таблицы Delta является mytable.

Создать новую таблицу

Если таблица Delta Lake с тем же именем еще не существует и в расположении, заданном именем пути Delta, по умолчанию Stream Analytics создает новую таблицу Delta. Эта новая таблица создается со следующей конфигурацией:

  • Writer версии 2.
  • Версия 1 Reader.
  • Таблица только для добавления данных.
  • Схема таблицы создается с помощью схемы первой обнаруженной записи.

Запишите в таблицу

Если таблица Delta Lake уже существует с тем же именем и в месте, указанном путем Delta, по умолчанию Stream Analytics записывает новые данные в существующую таблицу.

Гарантия доставки сообщений ровно один раз

Журнал транзакций позволяет Delta Lake обеспечивать однократную обработку. Stream Analytics также обеспечивает однократную точную доставку при передаче данных в Data Lake Storage 2-го поколения во время выполнения одного задания.

Принудительное применение схем

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

Все записи выходных данных проецируются в схему существующей таблицы. Если выходные данные записываются в новую таблицу Delta, схема таблицы создается с первой записью. Если входящие данные имеют один дополнительный столбец по сравнению с существующей схемой таблицы, он записывается в таблицу без дополнительного столбца. Если входящие данные отсутствуют в одном столбце по сравнению с существующей схемой таблицы, она записывается в таблицу со значением NULL.

Если схемы таблицы Delta и записи задания потоковой передачи не имеют пересечений, это считается случаем сбоя преобразования схемы. Это не единственный случай, который считается сбоем преобразования схемы.

При сбое преобразования схемы поведение задания следует политике обработки ошибок выходных данных, настроенной на уровне задания.

Контрольные точки разностного журнала

Задание Stream Analytics периодически создает контрольные точки в журнале Delta log в формате V1. Контрольные точки журнала Delta являются моментальными снимками таблицы Delta и обычно содержат имя файла данных, созданного заданием Stream Analytics. Если количество файлов данных большое, это приводит к большим контрольным точкам, что может привести к проблемам с памятью в задании Stream Analytics.

Регулярное обслуживание таблиц с помощью команд OPTIMIZE и VACUUM должно выполняться периодически с указанным свойством "delta.deletedFileRetentionDuration", которое устанавливается на разумное значение, балансируя между потребностью клиента в операциях временного перемещения и отката и возможностью обработки данных потоковых заданий. delta.deletedFileRetentionDuration используется для определения того, какие Remove File action включены в файл контрольных точек. Все Remove File action, которые старше deletedFileRetentionDuration, не будут включены в контрольную точку, что приведет к усечению контрольной точки и предотвратит использование функций перемещения во времени или отката. Значение deletedFileRetentionDuration по умолчанию равно 1 неделе, хотя некоторые подсистемы могут иметь другое значение по умолчанию.

Ограничения

  • Динамический ключ раздела (указание имени столбца схемы записи в пути Delta) не поддерживается.
  • Поддержка нескольких столбцов секционирования отсутствует. Если требуется несколько столбцов секционирования, рекомендуется использовать составной ключ в запросе, а затем указать его в качестве столбца секционирования.
    • Составной ключ можно создать в запросе. Например, "SELECT concat (col1, col2) AS compositeColumn INTO [blobOutput] FROM [input]".
  • Запись в Delta Lake возможна только с добавлением данных.
  • Проверка схемы в тестировании запросов недоступна.
  • Небольшое сжатие файлов не выполняется в "Stream Analytics".
  • Все файлы данных создаются без сжатия.
  • Типы Дата и Десятичные не поддерживаются.
  • Запись в существующие таблицы в Writer версии 7 или выше с помощью функций текстового редактора завершается ошибкой.
  • Когда задание Stream Analytics записывает пакет данных в Delta Lake, оно может создавать несколько действий Add File. Если для одного пакета создается слишком много действий по добавлению файлов, задание Stream Analytics может зависнуть.
    • Количество создаваемых действий добавления файлов определяется многими факторами:
    • Чтобы уменьшить количество действий добавления файлов, созданных для пакета:
      • Уменьшите конфигурации пакетной обработки Minimum Rows and Maximum Time.
      • Уменьшите кардинальность значений столбца секционирования путем корректировки входных данных или выбора другого столбца секционирования.
  • Задания Stream Analytics могут читать и записывать контрольные точки версии 1 только в формате одиночной части. Многосоставные контрольные точки и формат контрольных точек версии 2 не поддерживаются.