Este tópico descreve a definição, os casos de uso, os tipos de dados compatíveis e as diferenças em relação a outras edições de tipos de dados do MaxCompute V2.0.
Contexto
A edição de tipos de dados do MaxCompute V2.0 é uma das três edições de tipos de dados no MaxCompute.
Essa edição é adequada para projetos do MaxCompute sem dados gerados antes de abril de 2020 e cujos componentes dependentes sejam compatíveis com a edição de tipos de dados V2.0.
Ative a edição de tipos de dados V2.0
Para usar a edição de tipos de dados V2.0 em um projeto, configure as seguintes propriedades:
setproject odps.sql.type.system.odps2=true; -- Enable the MaxCompute V2.0 data type edition.
setproject odps.sql.decimal.odps2=true; -- Enable the DECIMAL V2.0 data type.
setproject odps.sql.hive.compatible=false; -- Disable Hive-compatible mode.
Tipos de dados básicos
Tipo | Exemplo de constante | Descrição |
TINYINT | 1Y, -127Y |
|
SMALLINT | 32767S, -100S |
|
INT | 1000, -15645787 |
|
BIGINT | 100000000000L, -1L |
|
BINARY |
|
|
FLOAT | 3.14F, CAST(3.14159261E+7 AS FLOAT) |
|
DOUBLE | 3.14D, 3.14159261E+7 |
|
DECIMAL(precision,scale) | 3.5BD, 99999999999.9999999BD |
|
VARCHAR(n) | N/A |
|
CHAR(n) | N/A | Tipo de caractere de comprimento fixo. n especifica o comprimento. Valor máximo de n: 255. O sistema preenche strings menores que n com espaços, mas ignora espaços à direita nas comparações. |
STRING | "abc", 'bcd', "alibaba", 'inc' |
|
DATE | DATE'2017-11-11' |
|
DATETIME | DATETIME'2017-11-11 00:00:00' |
|
TIMESTAMP | TIMESTAMP'2017-11-11 00:00:00.123456789' |
|
TIMESTAMP_NTZ | TIMESTAMP_NTZ '2017-11-11 00:00:00.123456789' |
|
BOOLEAN | True, False |
|
INTERVAL |
| Tipo de dados que representa períodos de tempo e expressa o intervalo entre duas datas ou horas. Inclui dois subtipos: INTERVAL_YEAR_MONTH e INTERVAL_DAY_TIME. Para mais informações, consulte Tipo de dados INTERVAL. |
Blob | N/A | Para mais informações, consulte Tipo de dados Blob e armazenamento multimodal. |
Notas de uso para tipos de dados:
Todos os tipos de dados listados acima aceitam valores NULL.
-
A palavra-chave INT em SQL refere-se ao tipo inteiro de 32 bits.
-- Convert a to a 32-bit integer. CAST(a AS INT) -
Constantes
Constantes inteiras assumem o tipo INT por padrão. Por exemplo, a constante inteira 1 em
SELECT 1 + a;é tratada como INT. Se uma constante exceder o intervalo INT, mas couber no BIGINT, será tratada como BIGINT. Se exceder o intervalo BIGINT, será tratada como DOUBLE.-
Ao inserir constantes em campos DECIMAL, o formato deve corresponder ao especificado na definição da constante. Veja o exemplo
3.5BDno código a seguir.INSERT INTO test_tb(a) VALUES (3.5BD) Constantes STRING aceitam concatenação. O sistema concatena automaticamente dois ou mais literais de string adjacentes. Por exemplo,
SELECT 'abc' 'efg' 'ddt';retornaabcefgddt.
-
Conversão implícita
Algumas conversões implícitas de tipo estão desativadas. Por exemplo, STRING->BIGINT, STRING->DATETIME, DOUBLE->BIGINT, DECIMAL->DOUBLE e DECIMAL->BIGINT podem causar perda de precisão ou erros. Use a função CAST para converter explicitamente tipos de dados cuja conversão implícita esteja desativada.
Constantes VARCHAR podem ser convertidas implicitamente em constantes STRING.
-
Tabelas, funções e UDFs
É possível usar funções integradas com tipos de dados V2.0 na edição de tipos de dados V2.0.
O sistema analisa e sobrecarrega tipos de dados em UDFs com base nos tipos V2.0.
Colunas de chave de partição aceitam os tipos de dados STRING, VARCHAR, CHAR, TINYINT, SMALLINT, INT e BIGINT.
Tipos de dados complexos
Tipos de dados complexos no MaxCompute permitem aninhamento de até 20 níveis. Para obter informações sobre funções integradas relacionadas, consulte ARRAY, MAP, STRUCT ou JSON.
Recomenda-se limitar o tamanho dos valores de tipos complexos a 1 MB. Valores acima desse limite podem causar erros de falta de memória (OOM) durante a computação.
Tipo | Definição | Construção |
ARRAY |
|
|
MAP |
|
|
STRUCT |
|
|
JSON |
|
|
Diferenças em relação a outras edições de tipos de dados
-
Diferenças de comportamento da sintaxe DML
-
A cláusula LIMIT comporta-se de maneira diferente em operações de conjunto.
Por exemplo, para
SELECT * FROM t1 UNION ALL SELECT * FROM t2 LIMIT 10;:Edição de tipos de dados V1.0:
SELECT * FROM t1 UNION ALL SELECT * FROM ( SELECT * FROM t2 LIMIT 10) t2;.Edição de tipos de dados V2.0:
SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2 ) t LIMIT 10;.
As cláusulas ORDER BY, DISTRIBUTE BY, SORT BY e CLUSTER BY também apresentam o mesmo comportamento.
-
A resolução de tipos em expressões IN difere entre as edições.
Por exemplo, para
a in (1, 2, 3):Edição de tipos de dados V1.0: todos os valores entre parênteses após IN devem ser do mesmo tipo.
Edição de tipos de dados V2.0: os valores entre parênteses após IN podem ser de tipos diferentes, desde que permitam conversão implícita para um tipo comum.
-
Regras de conversão de tipo INSERT
No modo compatível com Hive, se for possível converter explicitamente um tipo de dados de source para o tipo da coluna de destino, o MaxCompute insere e executa automaticamente uma função de conversão.
-
Nos modos V1.0 e V2.0, o tipo de source deve permitir conversão implícita; caso contrário, o sistema retorna um erro.
O exemplo a seguir tem êxito no modo compatível com Hive, mas falha nos modos V1.0 e V2.0:
CREATE TABLE t (a BIGINT); INSERT INTO TABLE SELECT 1.5;
-
-
Diferenças comportamentais de operadores e funções entre edições de tipos de dados
-
Para os operadores
+,-,*,/ePOW:Compatível com Hive: Retorna o valor inicial
V1.0 e V2.0: Retorna erro; em outros modos, retorna NULL
-
Para os operadores
>,>=,=,<e<=aplicados a valores DOUBLE:Compatível com Hive: Compara todos os dígitos diretamente
V1.0 e V2.0: Compara apenas os primeiros 15 dígitos à direita do ponto decimal e ignora os demais
-
Para os operadores
&,|e^:Compatível com Hive: Mesmo tipo da entrada
V1.0 e V2.0: Sempre BIGINT
-
Para funções como LENGTH, LENGTHB, FIND_IN_SET, INSTR, SIZE, HASH e SIGN:
Compatível com Hive: Retorna um valor INT.
V1.0 e V2.0: Retorna um valor BIGINT.
-
FLOOR e CEIL
Compatível com Hive: Se o parâmetro de entrada for DECIMAL, retorna um valor DECIMAL.
V1.0 e V2.0: Se o parâmetro de entrada for DECIMAL, retorna um valor BIGINT.
-
FROM_UNIXTIME
Compatível com Hive: Retorna um valor STRING.
V1.0 e V2.0: Retorna um valor DATETIME.
-
CONCAT_WS
Compatível com Hive: Ignora strings de entrada NULL e concatena as restantes.
V1.0 e V2.0: Se qualquer string de entrada for NULL, retorna NULL.
-
FIND_IN_SET
-
Compatível com Hive: Uma string vazia corresponde ao final da string de busca:
find_in_set("","") -- Returns 1 find_in_set("", "a,") -- Returns 2 V1.0 e V2.0: Trata string vazia como não correspondente e retorna 0.
-
-
REGEXP_(EXTRACT/REPLACE)
Compatível com Hive: Especificações de expressão regular Java
V1.0 e V2.0: Especificações do MaxCompute
-
SUBSTR
STRING SUBSTR(STRING <string>, BIGINT <start_position>[, BIGINT <length>])start_position: Obrigatório. Tipo BIGINT. A posição inicial padrão é 1.
Edição de tipos de dados compatível com Hive: Quando start_position é 0, o comportamento equivale ao da posição inicial 1.
Edições de tipos de dados 1.0 e 2.0: Quando start_position é 0, retorna uma string vazia.
Edição de tipos de dados compatível com BigQuery: Quando start_position é 0, o comportamento equivale ao da posição inicial 1.
Edição de tipos de dados compatível com BigQuery: Quando start_position é menor que o comprimento negativo da string, o comportamento equivale ao da posição inicial 1.
-