Типы данных (Azure Stream Analytics)

В Azure Stream Analytics каждая запись имеет связанный тип данных. Тип данных описывает (и ограничивает) набор значений, которые может содержать запись этого типа или выражение этого типа.

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

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

Ниже приведен список поддерживаемых типов данных.

Data type Описание
BIGINT Целые числа в диапазоне от -2^63 (-9 223 372 036 854 775 808) до 2^63-1 (9 223 372 036 854 775 807).
FLOAT Числа с плавающей запятой в диапазоне от 1,79E + 308 до -2,23E - 308, 0, и от 2,23E - 308 до 1,79E + 308. Десятичные значения с плавающей запятой, как правило, не имеют точного двоичного представления. Может быть потеряна точность. Это не является специфическим для Azure Stream Analytics, но происходит во всех реализациях чисел с плавающей запятой.
nvarchar(max) Текстовые значения, состоящие из символов Юникода. Примечание. Значение, отличное от max, не поддерживается.
DATETIME Определяет дату, объединенную с временем суток с долей секунды (7 цифр, точность 100 наносекунд), основанной на 24-часовых часах и относительно ВРЕМЕНИ UTC (смещение часового пояса 0).
bit Целое число, которое может принимать значение 1, 0 или NULL. Это поддерживается на уровне совместимости 1.2 и более поздних версий.
запись Набор пар "имя-значение". Значения должны иметь поддерживаемый тип данных.
array Упорядоченная коллекция значений. Значения должны иметь поддерживаемый тип данных.

Вы можете объединить (или сравнить) тип данных bigint и float. Он будет работать правильно во всех случаях, за исключением случаев очень больших значений bigint, которые не могут быть представлены.

Примечание

При чтении типов данных bigint за пределами диапазона, поддерживаемых Azure Stream Analytics, задание Stream Analytics не сможет десериализовать события с сообщением об ошибке InputDeserializationError. Вы можете предварительно обработать данные и преобразовать их в строку. Одним из вариантов является использование функций Azure для предварительной обработки данных и преобразования таких больших целых чисел в строку.

Преобразование типов

Ниже приведены правила , регулирующие преобразование типов данных.

  • Преобразование без потери точности во время операций записи входных и выходных данных является неявным и всегда выполняется успешно
  • Потеря точности и переполнение внутри операций записи выходных данных обрабатывается настроенной политикой ошибок (задано значение Drop или Retry).
  • Ошибки преобразования типов, происходящие во время операций записи выходных данных, обрабатываются политикой ошибок
  • Ошибки преобразования типов, происходящие во время операций чтения входных данных, приводят к тому, что задание удаляет событие

При преобразовании значений в float может произойти потеря точности. Он связан не с Azure Stream Analytics, а с типом данных float в целом. Таким образом, это не считается ошибкой. В случае, когда требуется сохранить каждую цифру, данные должны считываться как строковые.

Приведение данных

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

  • CAST : приведение одного столбца к заданному типу — завершится сбоем задания в случае ошибки преобразования.
  • TRY_CAST : приведение одного столбца к заданному типу — ошибки пропускаются как NULL. Сведения о том, как лучше использовать, см. в разделе Проверка входных данных . TRY_CAST
  • CREATE TABLE : определяет одну явную схему для входных данных. Строки с ошибками преобразования удаляются из потока
  • GetType : возвращает тип столбца.

В большинстве случаев рекомендуется использовать TRY_CAST. Эта функция защищает подчиненную обработку, обеспечивая тип выходных данных, а также предотвращает потерю данных, заменяя значение в ошибке значением NULL. Строка не удаляется, и это исходное значение по-прежнему можно проецировать в другой столбец.

Для надежных гарантий рекомендуется использовать CREATE TABLE. Такой подход позволяет информировать задание о схеме заданного входного данных без риска отклонения. Компромисс заключается в том, что на заданных входных данных можно определить только одну схему, а несоответствующие строки будут удалены.

По возможности все операции приведения должны выполняться явным образом с помощью этих функций, а не неявно (автоматически) в других функциях. Это позволяет избежать несоответствий типов, непредвиденного поведения и ошибок вставки для строго типизированных выходных данных, таких как базы данных SQL. Сведения о защите основной логики запросов от таких ошибок см. в разделе Проверка входных данных.

Преобразование в бит

Значения преобразуются между значениями float и bit с помощью следующих правил:

Исходный тип Кому
(БИТ) 1 (FLOAT) 1.0
(БИТ) 0 (FLOAT) 0,0
(BIT) NULL (FLOAT) NULL
(FLOAT) 0,0 (БИТ) 0
(FLOAT) любое другое значение (BIT) 1
(FLOAT) NULL (BIT) NULL

Сопоставления типов и форматы сериализации

Тип данных CSV в Выход CSV-файла JSON в Json out Avro в Avro out
bigint строка, преобразованная в 64-разрядное целое число со знаком 64-разрядное целое число со знаком, преобразованное в строку с помощью языка и региональных параметров задания number: целое число, преобразованное в 64-разрядное целое число со знаком;

Логическое значение: на уровне совместимости 1.1 и ниже значение false преобразуется в 0, значение true преобразуется в 1.
number: integer long и int преобразованы в 64-разрядное целое число со знаком;

Логическое значение: на уровне совместимости 1.1 и ниже false преобразуется в 0, true преобразуется в 1
long
float строка, преобразованная в 64-разрядное число с плавающей запятой со знаком 64-разрядное число со знаком с плавающей запятой, преобразованное в строку с помощью языка и региональных параметров задания number: дробь, преобразованная в 64-битовое число со знаком с плавающей запятой. number: дробь double и float, преобразованное в 64-разрядное число с плавающей запятой со знаком double
nvarchar(max) строка строка строка строка строка строка
datetime строка, преобразованная в дату и время согласно стандарту ISO 8601 строка с использованием стандарта ISO 8601 строка, преобразованная в дату и время согласно стандарту ISO 8601 дата и время, преобразованные в строку по стандарту ISO 8601 строка, преобразованная в дату и время согласно стандарту ISO 8601 дата и время, преобразованные в строку по стандарту ISO 8601
bit (уровень совместимости 1.2 и выше) строка "true", "false" или "null" преобразуется в целочисленное значение 1, 0 или null соответственно преобразовано в строку "true" или "false" Логическое значение: "false" преобразуется в 0, "true" преобразуется в 1 Логическое значение: логическое значение Логическое значение: false преобразуется в 0, значение true — в 1. Логическое
record Н/Д Не поддерживается, выводится строка "Запись" Объект JSON Объект JSON Тип записи Avro Тип записи Avro
array. Н/Д Не поддерживается, выводится строка "Array" Объект JSON Объект JSON Тип записи Avro Тип записи Avro

Примечание

Преобразование типа данных для Parquet не требуется.

Сопоставление типов при записи в структурированные хранилища данных

Тип данных SQL Power BI Azure Cosmos DB PostgreSQL Azure Data Explorer
bigint bigint, int, smallint, tinyint, все строковые типы (ntext, nvarchar, char, ...) да numeric: integer BIGINT dynamic, int, long
float float, real, decimal, numeric, все строковые типы ( ntext, nvarchar, char, ...) да number: дробь двойная точность, числовой. Ограничен 1,78E+308 dynamic, real, double
nvarchar(max) Все типы строк (ntext, nvarchar, char, uniqueidentifier...) да строка изменение символов, текст dynamic, string
datetime datetime, datetime2, datetimeoffset, все типы строк ( ntext, nvarchar, char, ...) да дата и время, преобразованные в строку по стандарту ISO 8601 метка времени, время. Параметр часового пояса поддерживается, но часовой пояс не предоставляется dynamic, string, datetime
bit (уровень совместимости 1.2 и выше) bigint, int, smallint, tinyint, bit, все типы строк (ntext, nvarchar, char, ...) да логическое значение: 1 преобразуется в true, 0 — в false. bit dynamic, bool
record Не поддерживается, выводится строка "Запись" Не поддерживается, выводится строка "Запись" Объект JSON Не поддерживается dynamic, bool, long, datetime, byte array, real, double, string
array. Не поддерживается, выводится строка "Array" Не поддерживается, выводится строка "Array" Объект JSON Не поддерживается dynamic, string