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 |