Todos os produtos
Search
Central de documentação

MaxCompute:Edição de tipos de dados compatível com Hive

Última atualização: Jun 30, 2026

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

1Y, -127Y

-128 a 127 (8 bits com sinal)

SMALLINT

32767S, -100S

-32.768 a 32.767 (16 bits com sinal)

INT

1000, -15645787

-2<sup>31</sup> a 2<sup>31</sup> - 1 (32 bits com sinal)

BIGINT

100000000000L, -1L

-2<sup>63</sup> + 1 a 2<sup>63</sup> - 1 (64 bits com sinal)

As constantes inteiras utilizam sufixos de tipo: Y para TINYINT, S para SMALLINT e L para 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

cast(3.14159261E+7 as float)

Ponto flutuante binário de 32 bits

DOUBLE

3.14159261E+7

Ponto flutuante binário de 64 bits

DECIMAL(precisão,escala)

3.5BD, 99999999999.9999999BD

Tipo numérico exato. Padrão: decimal(10,0). Precisão: 1–38; escala: 0–18

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

"abc", 'bcd'

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

DATE'2017-11-11'

0000-01-01 a 9999-12-31 (formato: yyyy-mm-dd)

DATETIME

DATETIME'2017-11-11 00:00:00'

0000-01-01 00:00:00.000 a 9999-12-31 23:59:59.999 (precisão de milissegundos)

TIMESTAMP

TIMESTAMP'2017-11-11 00:00:00.123456789'

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

True, False

Valores booleanos

BINARY

unhex('FA34E10293CB42848573A4E39937F479')

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 CAST(value AS BIGINT)

STRING

DATETIME

Use CAST(value AS DATETIME)

DOUBLE

BIGINT

Use CAST(value AS BIGINT)

DECIMAL

DOUBLE

Use CAST(value AS DOUBLE)

DECIMAL

BIGINT

Use CAST(value AS BIGINT)

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

array<int> / array<struct<a:int, b:string>>

array(1, 2, 3) / array(array(1, 2), array(3, 4))

MAP

map<string, string> / map<smallint, array<string>>

map("k1", "v1", "k2", "v2") / map(1S, array('a', 'b'), 2S, array('x', 'y'))

STRUCT

struct<x:int, y:int> / struct<field1:bigint, field2:array<int>, field3:map<int, int>>

named_struct('x', 1, 'y', 2) / named_struct('field1', 100L, 'field2', array(1, 2), 'field3', map(1, 100, 2, 200))

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 +, -, *, / e POW:

      • 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.