Todos os produtos
Search
Central de documentação

MaxCompute:Edição de tipos de dados do MaxCompute V2.0

Última atualização: Jun 30, 2026

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

  • Inteiro com sinal de 8 bits.

  • Valores válidos: -128 a 127.

SMALLINT

32767S, -100S

  • Inteiro com sinal de 16 bits.

  • Valores válidos: -32768 a 32767.

INT

1000, -15645787

  • Inteiro com sinal de 32 bits.

  • Valores válidos: -231 a 231-1.

BIGINT

100000000000L, -1L

  • Inteiro com sinal de 64 bits.

  • Valores válidos: -263+1 a 263-1.

BINARY

  • UNHEX('FA34E10293CB42848573A4E39937F479')

  • X'616263'

  • Tipo de dados binário. Comprimento máximo: 8 MB.

  • No formato X'num [...]', num é um dígito hexadecimal que pode ser 0-9 ou A-F. Por exemplo, X'616263' representa abc, pois o código ASCII de a é 0x61, o de b é 0x62 e o de c é 0x63. X'616263' equivale semanticamente a unhex('616263').

  • Se a string hexadecimal tiver um número ímpar de dígitos, o sistema adiciona 0 ao início. Por exemplo, X'616' equivale a X'0616'.

  • Use aspas simples obrigatoriamente. O sistema não aceita aspas duplas. Por exemplo, X"616263" não é interpretado como uma constante BINARY.

FLOAT

3.14F, CAST(3.14159261E+7 AS FLOAT)

  • Ponto flutuante binário de 32 bits.

  • Valores FLOAT podem perder precisão devido à forma de armazenamento e cálculo de ponto flutuante. Se for necessária alta precisão, converta o tipo FLOAT para DECIMAL.

DOUBLE

3.14D, 3.14159261E+7

  • Ponto flutuante binário de 64 bits.

  • Valores DOUBLE podem perder precisão devido à forma de armazenamento e cálculo de ponto flutuante. Se for necessária alta precisão, converta o tipo DOUBLE para DECIMAL.

DECIMAL(precision,scale)

3.5BD, 99999999999.9999999BD

  • Tipo numérico exato baseado no sistema decimal. Permite definir precisão (número máximo de dígitos) e escala (dígitos à direita do ponto decimal).

    • DECIMAL padrão: precisão de [1,38] e escala de [0, precision].

    • DECIMAL256: precisão de [39,76] e escala de [0, precision].

    Para mais informações, consulte Tipo de dados DECIMAL.

VARCHAR(n)

N/A

  • Tipo de caractere de comprimento variável. n especifica o comprimento.

  • Valores válidos de n: 1 a 65535.

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'

  • Tipo string.

  • Comprimento máximo: 8 MB.

DATE

DATE'2017-11-11'

  • Tipo data. Formato: yyyy-mm-dd.

  • Valores válidos: 0001-01-01 a 9999-12-31.

DATETIME

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

  • Tipo data e hora.

  • Valores válidos: 0001-01-01 00:00:00.000 a 9999-12-31 23:59:59.999. Precisão: milissegundo.

  • Os valores DATETIME não incluem milissegundos nos resultados da consulta. Use o parâmetro -dfp nos comandos do Tunnel para exibir o nível de milissegundos. Exemplo: tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'. Para mais informações sobre comandos do Tunnel, consulte Comandos do Tunnel.

TIMESTAMP

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

  • Tipo timestamp.

  • Valores válidos: 0001-01-01 00:00:00.000000000 a 9999-12-31 23:59:59.999999999. Precisão: nanossegundo.

  • O tipo TIMESTAMP independe de fuso horário. Em qualquer fuso, ele armazena um deslocamento em relação à Época (UTC 1970-01-01 00:00:00). Use funções integradas para calcular fusos horários em dados TIMESTAMP. Por exemplo, CAST(<a TIMESTAMP> AS STRING) converte dados TIMESTAMP para STRING conforme o fuso horário atual.

  • Há suporte para constantes TIMESTAMP com formatos específicos de fuso horário, como: TIMESTAMP '2025-02-25T12:09:35', TIMESTAMP '2025-02-25 12:09:35+07:00' e TIMESTAMP '2025-02-25 12:09:35Z'.

TIMESTAMP_NTZ

TIMESTAMP_NTZ '2017-11-11 00:00:00.123456789'

  • Tipo timestamp independente de fuso horário.

  • Valores válidos: 0000-01-01 00:00:00.000000000 a 9999-12-31 23:59:59.999999999. Para mais informações sobre o tipo TIMESTAMP_NTZ, consulte Tipo de dados TIMESTAMP_NTZ.

BOOLEAN

True, False

  • Tipo BOOLEAN.

  • Valores válidos: True, False.

INTERVAL

  • INTERVAL '2021' YEAR

  • INTERVAL '1' DAY

  • INTERVAL '2000-1' YEAR TO MONTH

  • INTERVAL '-1 23:59:59.999' DAY TO SECOND

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.5BD no 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'; retorna abcefgddt.

  • 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

  • ARRAY<INT>

  • ARRAY<STRUCT<a:INT, b:STRING>>

  • ARRAY(1, 2, 3)

  • ARRAY(STRUCT(1, '2'), STRUCT(3, '4'))

MAP

  • MAP<STRING, STRING>

  • MAP<SMALLINT, ARRAY<STRING>>

  • MAP("k1", "v1","k2","v2")

  • MAP(1S, ARRAY("a", "b"), 2S, ARRAY('z','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))

JSON

JSON

JSON '123'

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

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