A edição de tipos de dados compatível com Hive foi projetada para projetos do MaxCompute migrados do Hadoop cujos componentes dependentes já suportam a edição de tipos de dados do MaxCompute V2.0. Ela oferece tipos de dados e comportamentos de funções muito semelhantes aos do Hive, reduzindo os atritos durante a migração. Compreender as diferenças entre esta edição e as versões V1.0 e V2.0 do MaxCompute ajuda a antecipar problemas relacionados a tipos antes que cheguem ao ambiente de produção.
Ativar a edição de tipos de dados compatível com Hive
Execute todos os três comandos no nível do projeto.
setproject odps.sql.type.system.odps2=true; -- Enable MaxCompute V2.0 data types.
setproject odps.sql.decimal.odps2=true; -- Enable the DECIMAL data type in MaxCompute V2.0.
setproject odps.sql.hive.compatible=true; -- Enable Hive-compatible data types.
Tipos de dados suportados
Visão geral dos tipos
Tipos inteiros: TINYINT (8 bits), SMALLINT (16 bits), INT (32 bits), BIGINT (64 bits)
Tipos de ponto flutuante: FLOAT (32 bits), DOUBLE (64 bits), DECIMAL(precisão,escala) (numérico exato)
Tipos de string: STRING, VARCHAR(n), CHAR(n)
Tipos de data e hora: DATE, DATETIME, TIMESTAMP
Outros tipos: BOOLEAN, BINARY
Tipos complexos: ARRAY, MAP, STRUCT (todos aninháveis)
Tipos de dados básicos
Tipos inteiros
|
Tipo de dado |
Sintaxe da constante |
Intervalo |
|
TINYINT |
|
-128 a 127 (8 bits com sinal) |
|
SMALLINT |
|
-32.768 a 32.767 (16 bits com sinal) |
|
INT |
|
-2<sup>31</sup> a 2<sup>31</sup> - 1 (32 bits com sinal) |
|
BIGINT |
|
-2<sup>63</sup> + 1 a 2<sup>63</sup> - 1 (64 bits com sinal) |
As constantes inteiras utilizam sufixos de tipo:Ypara TINYINT,Spara SMALLINT eLpara BIGINT. Literais inteiros sem sufixo assumem o tipo INT por padrão. Se o valor exceder o intervalo de INT, mas couber em BIGINT, será tratado como BIGINT. Caso ultrapasse também o intervalo de BIGINT, será tratado como DOUBLE.
Tipos de ponto flutuante
|
Tipo de dado |
Sintaxe da constante |
Descrição |
|
FLOAT |
|
Ponto flutuante binário de 32 bits |
|
DOUBLE |
|
Ponto flutuante binário de 64 bits |
|
DECIMAL(precisão,escala) |
|
Tipo numérico exato. Padrão: |
As constantes DECIMAL utilizam o sufixo BD. Ao inserir valores em uma coluna DECIMAL:
insert into test_tb(a) values (3.5BD);
Para estender o intervalo de escala do DECIMAL de 0–18 para 0–38:
set odps.sql.decimal2.extended.scale.enable=true;
Tipos de string
|
Tipo de dado |
Sintaxe da constante |
Descrição |
|
STRING |
|
Comprimento máximo: 8 MB |
|
VARCHAR(n) |
Nenhuma |
Comprimento variável. n: 1–65.535 |
|
CHAR(n) |
Nenhuma |
Comprimento fixo. n máximo: 255. Preenchido com espaços se for mais curto; o preenchimento é ignorado nas comparações |
É possível concatenar constantes de string diretamente. Por exemplo, abc e xyz resultam em abcxyz.
Tipos de data e hora
|
Tipo de dado |
Sintaxe da constante |
Intervalo |
|
DATE |
|
0000-01-01 a 9999-12-31 (formato: |
|
DATETIME |
|
0000-01-01 00:00:00.000 a 9999-12-31 23:59:59.999 (precisão de milissegundos) |
|
TIMESTAMP |
|
0000-01-01 00:00:00.000000000 a 9999-12-31 23:59:59.999999999 (precisão de nanossegundos, independente de fuso horário) |
Os valores DATETIME não incluem o componente de milissegundos. Para incluir milissegundos ao carregar dados com o Tunnel, use o parâmetro -dfp:
tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'
Para obter mais informações, consulte Comandos do Tunnel.
O tipo TIMESTAMP é independente de fuso horário, mas funções como cast(<a timestamp> as string) exibem os valores com base no fuso horário da sessão atual.
Outros tipos
|
Tipo de dado |
Sintaxe da constante |
Descrição |
|
BOOLEAN |
|
Valores booleanos |
|
BINARY |
|
Dados binários. Comprimento máximo: 8 MB |
Colunas de chave de partição
O tipo de dado de uma coluna de chave de partição pode ser STRING, VARCHAR, CHAR, TINYINT, SMALLINT, INT ou BIGINT.
Valores NULL
Todos os tipos de dados básicos aceitam valores NULL.
Conversões implícitas
As conversões a seguir estão desativadas porque podem reduzir a precisão ou causar erros:
|
Tipo de origem |
Tipo de destino |
Solução alternativa |
|
STRING |
BIGINT |
Use |
|
STRING |
DATETIME |
Use |
|
DOUBLE |
BIGINT |
Use |
|
DECIMAL |
DOUBLE |
Use |
|
DECIMAL |
BIGINT |
Use |
Constantes VARCHAR podem ser convertidas implicitamente para STRING.
Tipos de dados complexos
O MaxCompute suporta três tipos de dados complexos na edição compatível com Hive. Esses tipos permitem aninhamento.
|
Tipo de dado |
Exemplos de definição |
Exemplos de construtor |
|
ARRAY |
|
|
|
MAP |
|
|
|
STRUCT |
|
|
Para consultar as funções integradas que operam com tipos complexos, veja ARRAY, MAP e STRUCT.
Diferenças em relação a outras edições
A edição compatível com Hive diverge das edições V1.0 e V2.0 do MaxCompute nas regras de INSERT, no comportamento de operadores e nos tipos de retorno de funções. Analise essas diferenças com atenção ao migrar do Hadoop ou ao executar o mesmo SQL em múltiplas edições.
-
Regras de conversão de tipo no INSERT
No modo compatível com Hive, se um tipo de dado de origem puder ser convertido explicitamente para o tipo da coluna de destino, o MaxCompute insere automaticamente uma função de conversão e a executa.
-
Nos modos V1.0 e V2.0, o tipo de origem precisa ser implicitamente conversível; 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 as edições de tipos de dados
-
Para os operadores
+,-,*,/ePOW:Compatível com Hive: Retorna o valor inicial
V1.0 e V2.0: Retorna um 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; os demais são ignorados
-
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, SIGN
Compatível com Hive: Retorna um valor INT.
V1.0 e V2.0: Retorna um valor BIGINT.
-
FLOOR, CEIL
Compatível com Hive: Se o parâmetro de entrada for do tipo DECIMAL, retorna um valor DECIMAL.
V1.0 e V2.0: Se o parâmetro de entrada for do tipo 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; concatena as strings 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: Considera uma string vazia como sem correspondência 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.
-