Секционирование пользовательского блоба на выходе в Azure Stream Analytics

Azure Stream Analytics поддерживает разделение выходных blob-объектов по настраиваемым полям или атрибутам и собственным шаблонам пути DateTime.

Настраиваемое поле или атрибуты

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

Параметры ключа раздела

Ключ секции или имя столбца, используемое для секционирования входных данных, может содержать любой символ, принятый для имен BLOB-объектов. Вложенные поля нельзя использовать в качестве ключа секции, если они не используются вместе с псевдонимами. Однако для создания иерархии файлов можно использовать определенные символы. Например, чтобы создать столбец, объединяющий данные из двух других столбцов для создания уникального ключа секции, можно использовать следующий запрос:

SELECT name, id, CONCAT(name, "/", id) AS nameid

Ключ секции должен быть NVARCHAR(MAX), BIGINTFLOATили BIT (уровень совместимости 1.2 или выше). Типы DateTime, Array и Records не поддерживаются, но их можно использовать в качестве ключей разделов, если они преобразованы в строки. Дополнительные сведения см. в разделе "Типы данных Azure Stream Analytics".

Разделить выходные данные BLOB по пользовательскому полю

Предположим, что задание принимает входные данные из сеансов пользователей в реальном времени, подключенных к внешней службе видеоигр, где полученные данные содержат столбец client_id для идентификации сеансов. Чтобы секционировать данные по , задайте поле шаблона пути объекта так, чтобы включить токен секционирования в свойствах выхода объекта при создании задания. Поскольку данные с различными client_id значениями передаются через задание Stream Analytics, выходные данные сохраняются в отдельные папки на основе одного client_id значения для каждой папки.

Снимок экрана: шаблон пути с идентификатором клиента.

Аналогичным образом, если входные данные задания были данными датчиков из миллионов датчиков, где у каждого датчика был sensor_id, шаблон пути будет {sensor_id} для секционирования данных каждого датчика в разные папки.

При использовании REST API выходной раздел JSON-файла, используемого для этого запроса, может выглядеть следующим образом:

Снимок экрана: конфигурация выходных данных REST API JSON для хранилища BLOB-объектов.

После запуска clients задания контейнер может выглядеть следующим образом:

Снимок экрана: контейнер клиентов.

Каждая папка может содержать несколько блобов, где каждый блоб содержит одну или несколько записей. В предыдущем примере в папке с меткой "06000000" находится один блоб со следующим содержимым:

Снимок экрана, показывающий содержимое BLOB-объекта с записями с идентификаторами клиентов.

Обратите внимание, что каждая запись в большом двоичном объекте имеет столбец client_id, соответствующий имени папки, так как столбец, используемый для секционирования выходных данных в пути вывода client_id, совпадает с ним.

Ограничения пользовательского ключа секционирования

  1. Только один пользовательский ключ раздела разрешается в свойстве выходных данных в шаблоне пути для блобов. Допустимы все следующие шаблоны пути:

    • cluster1/{date}/{aFieldInMyData}
    • cluster1/{time}/{aFieldInMyData}
    • cluster1/{aFieldInMyData}
    • cluster1/{date}/{time}/{aFieldInMyData}
  2. Если вы хотите использовать более одного поля ввода, можно создать составной ключ в запросе для настраиваемого разбиения пути в выходных BLOB-данных с помощью CONCAT. Например, select concat (col1, col2) as compositeColumn into blobOutput from input. Затем можно указать compositeColumn в качестве пользовательского пути в Хранилище BLOB-объектов Azure.

  3. Ключи секций являются нечувствительными к регистру, поэтому ключи секций, как John, и john являются эквивалентными. Кроме того, нельзя использовать выражения в качестве ключей секционирования. Например, {columnA + columnB} не работает.

  4. Если входной поток состоит из записей, для которых количество уникальных значений ключа секции меньше 8 000, Stream Analytics добавляет эти записи к существующим BLOB-объектам и создает новые BLOB-объекты только при необходимости. Если мощность превышает 8 000, не гарантируется, что Stream Analytics будет записывать данные в существующие BLOB-объекты. Stream Analytics не создает новые BLOB-объекты для любого количества записей с одним и тем же ключом раздела.

  5. Если выходные данные BLOB настроены как неизменяемые, Stream Analytics создает новый BLOB при каждом отправке данных.

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

Пользовательские DateTime шаблоны путей позволяют указать выходной формат, который соответствует стандартам потоковой передачи Hive, что даёт возможность Stream Analytics отправлять данные в Azure HDInsight и Azure Databricks для последующей обработки. Пользовательские DateTime шаблоны маршрутов легко создаются, используя ключевое слово datetime в поле префикса пути выходных данных blob-объекта вместе с описателем формата. Например, {datetime:yyyy}.

Поддерживаемые токены

Следующие спецификаторы формата можно использовать отдельно или в сочетании для создания пользовательских DateTime форматов.

Спецификатор формата Описание Результаты на примерное время 2018-01-02T10:06:08
{datetime:yyyy} Год как четырехзначное число 2018
{datetime:MM} Месяц от 01 до 12 01
{datetime:M} Месяц от 1 до 12 1
{datetime:dd} День от 01 до 31 02
{datetime:d} День от 1 до 31 2
{datetime:HH} Часы в 24-часовом формате, от 00 до 23 10
{datetime:mm} Минуты от 00 до 60 06
{datetime:m} Минуты от 0 до 60 6
{datetime:ss} Секунды от 00 до 60 08

Если вы не хотите использовать пользовательские DateTime шаблоны, можно добавить токен {date} и/или {time} в поле префикса пути, чтобы создать раскрывающийся список со встроенными DateTime форматами.

Снимок экрана, показывающий устаревшие форматы DateTime в Stream Analytics.

Расширяемость и ограничения маркера DateTime

Вы можете использовать столько маркеров ({datetime:<specifier>}) в шаблоне пути, сколько хотите, пока не достигнете ограничения на количество символов в префиксе пути. Спецификаторы формата не могут быть объединены в один токен, за исключением комбинаций, уже перечисленных в раскрывающемся списке даты и времени.

Для раздела пути logs/MM/dd:

Допустимое выражение Недопустимое выражение
logs/{datetime:MM}/{datetime:dd} logs/{datetime:MM/dd}

Можно использовать один и тот же описатель формата несколько раз в префиксе пути. Токен должен повторяться каждый раз.

Стандарты потоковой передачи Hive

Вы можете использовать пользовательские шаблоны путей для Хранилище BLOB-объектов с соглашением Hive Streaming, которое предполагает, что в имени папки будет указана метка column=.

Например, year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}/hour={datetime:HH}.

Пользовательские выходные данные устраняют необходимость изменения таблиц и автоматически добавляют секции для передачи данных между Stream Analytics и Hive. Вместо этого многие папки можно добавлять автоматически с помощью:

MSCK REPAIR TABLE while hive.exec.dynamic.partition true

Создание структуры папок, совместимой с Hive DateTime

Создайте учетную запись хранения, группу ресурсов, задание Stream Analytics и источник входных данных в соответствии с кратким руководством Quickstart по порталу Stream Analytics Azure. Используйте те же примеры данных, которые используются в кратком руководстве. Примеры данных также доступны в GitHub.

Настройте выходной приемник Blob со следующей конфигурацией:

Скриншот, на котором показано создание приемника выходных данных Blob с помощью Stream Analytics.

Полный шаблон пути:

year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

Когда вы запускаете задание, в вашем контейнере BLOB создается структура папок, основанная на образце пути. Вы можете детализировать до уровня дня.

Снимок экрана: выходные данные BLOB-объектов Stream Analytics с пользовательским шаблоном пути.