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 |