Tipos de Dados (Azure Stream Analytics)

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

Tenha em atenção que são os registos que têm um tipo e não colunas. Cada registo de uma coluna pode ter um tipo diferente. Se for transparente para a maioria das aplicações, permite o processamento simples de cenários de desvio de esquemas e outros padrões de escrita invulgares.

Tipos de dados suportados

Segue-se a lista de tipos de dados suportados.

Tipo de dados Descrição
bigint Números inteiros no intervalo -2^63 (-9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807).
float Números de vírgula flutuante no intervalo - 1,79E+308 a -2,23E-308, 0 e 2,23E-308 a 1,79E+308. Geralmente, os valores decimais de vírgula flutuante não têm uma representação binária exata. A perda de precisão pode ser experimentada. Isto não é específico do Azure Stream Analytics, mas ocorre em todas as implementações de números de vírgula flutuante.
nvarchar(máx.) Valores de texto, compostos por carateres Unicode. Nota: não é suportado um valor diferente do máximo.
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 num relógio de 24 horas e em relação a UTC (desvio do fuso horário 0).
bit Um número inteiro que pode ter um valor de 1, 0 ou NULL. Isto é suportado no nível de compatibilidade 1.2 e superior.
gravar Conjunto de pares nome/valor. Os valores têm de ser do tipo de dados suportado.
matriz Coleção ordenada de valores. Os valores têm de ser do tipo de dados suportado.

Pode associar (ou comparar) um bigint e um tipo de dados flutuante. Funcionará corretamente em todos os casos, exceto no caso dos valores bigint muito grandes que não podem ser representados.

Nota

Ao ler tipos de dados bigint fora do intervalo, o Azure Stream Analytics suporta, a tarefa do Stream Analytics não conseguirá anular a serialização dos eventos com a mensagem de erro: InputDeserializationError. Pode pré-processar os dados e convertê-lo em cadeia. Uma opção é utilizar as funções do Azure para pré-processar os dados e converter números inteiros tão grandes em cadeia.

Conversões de tipos

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

  • A conversão sem perda de precisão durante as operações de escrita de entrada e saída está implícita e é sempre bem-sucedida
  • A perda de precisão e o excesso dentro das operações de escrita de saída são processados pela política de erro configurada (definida como Drop ou Retry)
  • Os erros de conversão de tipo que ocorrem durante as operações de escrita de saída são processados pela política de erros
  • Erros de conversão do tipo que ocorrem durante as operações de leitura de entrada fazem com que a tarefa remova o evento

Pode ocorrer uma perda de precisão na conversão de valores em float. Não é específico do Azure Stream Analytics, mas sim do tipo de dados flutuante em geral. Como tal, não é considerado um erro. No caso de cada dígito precisar de ser conservado, os dados devem ser lidos como cadeia.

Dados de casting

Existem quatro funções na linguagem SQL de transmissão em fluxo que são úteis para observar e ajustar o tipo de dados dos seus dados.

  • CAST : cast a single column to a given type - will fail the job in case of conversion error
  • TRY_CAST : cast a single column to a given type - errors are let through as NULL. Veja a validação de entrada para saber como utilizar melhor TRY_CAST
  • CRIAR TABELA : defina um único esquema explícito para uma entrada. As linhas com erros de conversão são removidas do fluxo
  • GetType : devolver o tipo de coluna

Para a maioria dos casos de utilização, a opção recomendada é utilizar TRY_CAST. Esta função protege o processamento a jusante ao garantir o tipo de saída, ao mesmo tempo que impede a perda de dados ao substituir o valor em erro por NULL. A linha não é removida e esse valor original ainda pode ser projetado noutra coluna.

Para garantias fortes, a opção recomendada é utilizar CREATE TABLE. Esta abordagem permite informar a tarefa do esquema de uma determinada entrada, sem risco de desvio. A contrapartida é que apenas um único esquema pode ser definido numa determinada entrada e as linhas não conformes serão removidas.

Se possível, todas as operações de casting devem ser efetuadas explicitamente através destas funções, em vez de implicitamente (silenciosamente) noutras funções. Isto evita erros de tipos, comportamentos inesperados e erros de inserção para saídas com tipos fortes, como bases de dados SQL. Veja validação de entrada para saber como proteger a lógica de consulta principal de tais 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 tipos e formatos de serialização

Tipo de dados CSV no CSV para fora JSON em JSON fora Avro em Avro para fora
bigint cadeia convertida em número inteiro assinado de 64 bits Número inteiro assinado de 64 bits convertido em cadeia com a cultura da tarefa número: número inteiro convertido em número inteiro assinado de 64 bits;

Booleano: no nível de compatibilidade 1.1 e abaixo de "falso" é convertido em 0, "true" é convertido em 1
número: número inteiro longo e int convertido em número inteiro assinado de 64 bits;

Booleano: no nível de compatibilidade 1.1 e abaixo falso é convertido em 0, verdadeiro é convertido em 1
long
flutuante cadeia convertida em número de ponto flutuante assinado de 64 bits Número de ponto flutuante assinado de 64 bits convertido em cadeia com a cultura da tarefa número: fração convertida em número de ponto flutuante assinado de 64 bits número: fração número de ponto flutuante assinado de 64 bits e duplo convertido em 64 bits double
nvarchar(máx.) string string string string string string
datetime cadeia convertida em datetime a seguir à norma ISO 8601 cadeia com norma ISO 8601 cadeia convertida em datetime a seguir à norma ISO 8601 datetime convertido em cadeia com a norma ISO 8601 cadeia convertida em datetime a seguir à norma ISO 8601 datetime convertido em cadeia com a norma ISO 8601
bit (nível de compatibilidade 1.2 e superior) a cadeia "true", "false" ou "null" é convertida para o valor inteiro 1, 0 ou nulo correspondentemente convertido em cadeia "true" ou "false" Booleano: "falso" é convertido em 0, "true" é convertido em 1 Booleano: valor booleano Booleano: falso é convertido em 0, verdadeiro é convertido em 1 boolean
gravar N/D Não suportado, a cadeia "Gravar" é saída Objeto JSON Objeto JSON Tipo de registo Avro Tipo de registo Avro
matriz N/D Não suportado, a cadeia "Matriz" é saída Objeto JSON Objeto JSON Tipo de registo Avro Tipo de registo Avro

Nota

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

Mapeamento de tipos ao escrever em arquivos 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 (ntext, nvarchar, char, ...) sim numérico: número inteiro bigint dinâmico, int, longo
flutuante float, real, decimal, numérico, todos os tipos de cadeias ( ntext, nvarchar, char, ...) sim número: fração precisão dupla, numérica. Limitado a 1,78E+308 dinâmico, real, duplo
nvarchar(máx.) Todos os tipos de cadeias (ntext, nvarchar, caráter, uniqueidentifier...) sim string carateres variáveis, texto dinâmico, cadeia
datetime datetime, datetime2, datetimeoffset, todos os tipos de cadeia ( ntext, nvarchar, char, ...) sim datetime convertido em cadeia com a norma ISO 8601 carimbo de data/hora, hora. Opção de fuso horário suportada, mas não será fornecido nenhum fuso horário dinâmico, cadeia, datetime
bit (nível de compatibilidade 1.2 e superior) bigint, int, smallint, tinyint, bit, all string types (ntext, nvarchar, char, ...) sim booleano: 1 é convertido em verdadeiro, 0 convertido em falso bit dinâmico, bool
gravar Não suportado, a cadeia "Gravar" é saída Não suportado, a cadeia "Gravar" é saída Objeto JSON Não suportado dinâmico, bool, longo, datetime, matriz de bytes, real, duplo, cadeia
matriz Não suportado, a cadeia "Matriz" é saída Não suportado, a cadeia "Matriz" é saída Objeto JSON Não suportado dinâmico, cadeia