Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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-файла, используемого для этого запроса, может выглядеть следующим образом:
После запуска clients задания контейнер может выглядеть следующим образом:
Каждая папка может содержать несколько блобов, где каждый блоб содержит одну или несколько записей. В предыдущем примере в папке с меткой "06000000" находится один блоб со следующим содержимым:
Обратите внимание, что каждая запись в большом двоичном объекте имеет столбец client_id, соответствующий имени папки, так как столбец, используемый для секционирования выходных данных в пути вывода client_id, совпадает с ним.
Ограничения пользовательского ключа секционирования
Только один пользовательский ключ раздела разрешается в свойстве выходных данных в шаблоне пути для блобов. Допустимы все следующие шаблоны пути:
cluster1/{date}/{aFieldInMyData}cluster1/{time}/{aFieldInMyData}cluster1/{aFieldInMyData}cluster1/{date}/{time}/{aFieldInMyData}
Если вы хотите использовать более одного поля ввода, можно создать составной ключ в запросе для настраиваемого разбиения пути в выходных BLOB-данных с помощью
CONCAT. Например,select concat (col1, col2) as compositeColumn into blobOutput from input. Затем можно указатьcompositeColumnв качестве пользовательского пути в Хранилище BLOB-объектов Azure.Ключи секций являются нечувствительными к регистру, поэтому ключи секций, как
John, иjohnявляются эквивалентными. Кроме того, нельзя использовать выражения в качестве ключей секционирования. Например,{columnA + columnB}не работает.Если входной поток состоит из записей, для которых количество уникальных значений ключа секции меньше 8 000, Stream Analytics добавляет эти записи к существующим BLOB-объектам и создает новые BLOB-объекты только при необходимости. Если мощность превышает 8 000, не гарантируется, что Stream Analytics будет записывать данные в существующие BLOB-объекты. Stream Analytics не создает новые BLOB-объекты для любого количества записей с одним и тем же ключом раздела.
Если выходные данные 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
Вы можете использовать столько маркеров ({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 со следующей конфигурацией:
Полный шаблон пути:
year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}
Когда вы запускаете задание, в вашем контейнере BLOB создается структура папок, основанная на образце пути. Вы можете детализировать до уровня дня.