Tipos de dados (Azure Stream Analytics)

No Azure Stream Analytics, cada registro tem um tipo de dados relacionado. Um tipo de dados descreve (e restringe) o conjunto de valores que um registro desse tipo pode conter ou uma expressão desse tipo pode produzir.

Observe que são registros que têm um tipo e não colunas. Cada registro de uma coluna pode ter um tipo diferente. Se isso for transparente para a maioria dos aplicativos, ele permitirá a manipulação direta de cenários de descompasso de esquema e outros padrões de digitação incomuns.

Tipos de dados com suporte

Segue a lista de tipos de dados com suporte.

Data type Descrição
BIGINT Inteiros no intervalo de -2^63 (-9,223,372,036,854,775,808) a 2^63-1 (9,223,372,036,854,775,807).
FLOAT Números de ponto flutuante no intervalo de - 1.79E+308 a -2.23E-308, 0, e 2.23E-308 a 1.79E+308. Valores decimais de ponto flutuante geralmente não têm uma representação binária exata. A perda de precisão pode ser experimentada. Isso não é específico do Azure Stream Analytics, mas ocorre em todas as implementações de número de ponto flutuante.
nvarchar(max) Valores de texto, compostos por caracteres Unicode. Observação: não há suporte para um valor diferente de max.
DATETIME Define uma data combinada com uma hora do dia com segundos fracionários (7 dígitos, precisão de 100 nanossegundos) que se baseia em um relógio de 24 horas e em relação a UTC (deslocamento de fuso horário 0).
bit Um inteiro que pode ter um valor de 1, 0 ou NULL. Há suporte para isso no nível de compatibilidade 1.2 e superior.
registro Conjunto de pares nome/valor. Os valores devem ser do tipo de dados com suporte.
array Coleção ordenada de valores. Os valores devem ser do tipo de dados com suporte.

Você pode ingressar em (ou comparar) um bigint e um tipo de dados float. Ele funcionará corretamente em todos os casos, exceto no caso dos valores bigint muito grandes que não podem ser representados.

Observação

Ao ler tipos de dados bigint fora do intervalo, o Azure Stream Analytics dá suporte, seu trabalho do Stream Analytics falharia em desserializar os eventos com a mensagem de erro: InputDeserializationError. Você pode pré-processar os dados e convertê-los em cadeia de caracteres. Uma opção é usar as funções do Azure para pré-processar os dados e converter esses inteiros grandes em cadeia de caracteres.

Conversões de tipo

Estas são as regras que regem as conversões de tipo de dados:

  • A conversão sem perda de precisão durante as operações de leitura e gravação de saída de entrada é implícita e é sempre bem-sucedida
  • A perda de precisão e o estouro dentro das operações de gravação de saída são tratados pela política de erro configurada (definida como Drop ou Retry)
  • Erros de conversão de tipo que ocorrem durante as operações de gravação de saída são tratados pela política de erro
  • Erros de conversão de tipo ocorrendo durante operações de leitura de entrada fazem com que o trabalho remova o evento

Uma perda de precisão pode ocorrer na conversão de valores para float. Ele não é específico para o Azure Stream Analytics, mas para o tipo de dados float em geral. Como tal, não é considerado um erro. No caso em que cada dígito precisa ser conservado, os dados devem ser lidos como cadeia de caracteres.

Dados de conversão

Há quatro funções na linguagem SQL de streaming que são úteis para observar e ajustar o tipo de dados de seus dados.

  • CAST : converter uma única coluna em um determinado tipo – falhará no trabalho em caso de erro de conversão
  • TRY_CAST : converter uma única coluna em um determinado tipo – os erros são transmitidos como NULL. Confira validação de entrada para saber como usar melhor TRY_CAST
  • CREATE TABLE : defina um único esquema explícito para uma entrada. Linhas com erros de conversão são removidas do fluxo
  • GetType : retornar o tipo de uma coluna

Para a maioria dos casos de uso, a opção recomendada é usar TRY_CAST. Essa função protege o processamento downstream garantindo o tipo de saída, evitando a perda de dados substituindo o valor em erro por NULL. A linha não é descartada e esse valor original ainda pode ser projetado em outra coluna.

Para garantias fortes, a opção recomendada é usar CREATE TABLE. Essa abordagem permite informar o trabalho do esquema de uma determinada entrada, sem risco de desvio. A compensação é que apenas um único esquema pode ser definido em uma determinada entrada e linhas não compatíveis serão descartadas.

Se possível, todas as operações de conversão devem ser feitas explicitamente por meio dessas funções, em vez de implicitamente (silenciosamente) em outras funções. Isso evita incompatibilidades de tipo, comportamentos inesperados e erros de inserção para saídas fortemente tipdas, como bancos de dados SQL. Consulte validação de entrada para saber como proteger a lógica de consulta principal contra esses erros.

Conversão em bit

Os valores serão convertidos entre float e bit com as seguintes regras:

De Para
(BIT) 1 (FLOAT) 1.0
(BIT) 0 (FLOAT) 0.0
(BIT) NULL (FLOAT) NULL
(FLOAT) 0.0 (BIT) 0
(FLOAT) qualquer outro valor (BIT) 1
(FLOAT) NULL (BIT) NULL

Mapeamentos de tipo e formatos de serialização

Tipo de dados CSV em CSV fora JSON em JSON fora Avro in Avro out
bigint cadeia de caracteres convertida em inteiro assinado de 64 bits Inteiro com sinal de 64 bits convertido em cadeia de caracteres usando a cultura do trabalho number: inteiro convertido em inteiro com sinal de 64 bits;

Booliano: no nível de compatibilidade 1.1 e abaixo de "false" é convertido em 0, "true" é convertido em 1
número: inteiro long e int convertidos em inteiro com sinal de 64 bits;

Booliano: no nível de compatibilidade 1.1 e abaixo de false é convertido em 0, true é convertido em 1
long
float cadeia de caracteres convertida em número de ponto de flutuação assinado de 64 bits Número de ponto float com sinal de 64 bits convertido em cadeia de caracteres usando a cultura do trabalho número: fração convertida em número de ponto de flutuação assinado de 64 bits número: fração double e float convertidos em número de ponto de flutuação assinado de 64 bits double
nvarchar(max) string string string string string string
datetime cadeia de caracteres convertida em datetime seguindo o padrão ISO 8601 cadeia de caracteres usando o padrão ISO 8601 cadeia de caracteres convertida em datetime seguindo o padrão ISO 8601 datetime convertido em cadeia de caracteres usando o padrão ISO 8601 cadeia de caracteres convertida em datetime seguindo o padrão ISO 8601 datetime convertido em cadeia de caracteres usando o padrão ISO 8601
bit (nível de compatibilidade 1.2 e superior) cadeia de caracteres "true", "false" ou "null" é convertida em valor inteiro 1, 0 ou nulo correspondentemente convertido em cadeia de caracteres "true" ou "false" Booliano: "false" é convertido em 0, "true" é convertido em 1 Booliano: valor booliano Booliano: false é convertido em 0, true é convertido em 1 booleano
record N/D Sem suporte, a cadeia de caracteres "Record" é gerada Objeto JSON Objeto JSON Tipo de registro Avro Tipo de registro Avro
array N/D Sem suporte, a cadeia de caracteres "Array" é gerada Objeto JSON Objeto JSON Tipo de registro Avro Tipo de registro Avro

Observação

Nenhuma conversão de tipo de dados é necessária para Parquet.

Mapeamento de tipo ao gravar em armazenamentos de dados estruturados

Tipo de dados SQL Power BI Azure Cosmos DB PostgreSQL Azure Data Explorer
bigint bigint, int, smallint, tinyint, todos os tipos de cadeia de caracteres (ntext, nvarchar, char, ...) sim numeric: inteiro BIGINT dynamic, int, long
float float, real, decimal, numeric, todos os tipos de cadeia de caracteres ( ntext, nvarchar, char, ...) sim número: fração precisão dupla, numérica. Limitado a 1,78E+308 dinâmico, real, duplo
nvarchar(max) Todos os tipos de cadeia de caracteres (ntext, nvarchar, char, uniqueidentifier...) sim string caractere variável, texto dynamic, string
datetime datetime, datetime2, datetimeoffset, todos os tipos de cadeia de caracteres ( ntext, nvarchar, char, ...) sim datetime convertido em cadeia de caracteres usando o padrão ISO 8601 carimbo de data/hora, hora. Opção de fuso horário com suporte, mas nenhum fuso horário será fornecido dynamic, string, datetime
bit (nível de compatibilidade 1.2 e superior) bigint, int, smallint, tinyint, bit, todos os tipos de cadeia de caracteres (ntext, nvarchar, char, ...) sim booliano: 1 é convertido em true, 0 convertido em false bit dynamic, bool
record Sem suporte, a cadeia de caracteres "Record" é gerada Sem suporte, a cadeia de caracteres "Record" é gerada Objeto JSON Sem suporte dynamic, bool, long, datetime, byte array, real, double, string
array Sem suporte, a cadeia de caracteres "Array" é gerada Sem suporte, a cadeia de caracteres "Array" é gerada Objeto JSON Sem suporte dynamic, string