Todos os produtos
Search
Central de documentação

MaxCompute:Versão 2.0 dos tipos de dados

Última atualização: Oct 10, 2026

Este tópico descreve a versão 2.0 dos tipos de dados do MaxCompute, incluindo sua definição, casos de uso, tipos de dados suportados e as diferenças em relação a outras versões de tipos de dados.

Contexto

A versão 2.0 dos tipos de dados é uma das três versões de tipos de dados disponíveis no MaxCompute.

Ela é adequada para projetos do MaxCompute que não possuíam dados antes de abril de 2020, desde que todos os componentes de produtos dependentes suportem a versão 2.0 dos tipos de dados.

Como ativar a versão 2.0 dos tipos de dados

Para usar a versão 2.0 dos tipos de dados em um projeto, defina as seguintes propriedades.

setproject odps.sql.type.system.odps2=true; -- Enable MaxCompute data type version 2.0.
setproject odps.sql.decimal.odps2=true; -- Enable the DECIMAL 2.0 data type.
setproject odps.sql.hive.compatible=false; -- Disable Hive-compatible mode.

Tipos de dados básicos

Tipo

Literal

Descrição

TINYINT

1Y, -127Y

  • Um inteiro com sinal de 8 bits.

  • Intervalo de valores: -128 a 127.

SMALLINT

32767S, -100S

  • Um inteiro com sinal de 16 bits.

  • Intervalo de valores: -32768 a 32767.

INT

1000, -15645787

  • Um inteiro com sinal de 32 bits.

  • Intervalo de valores: -231 a 231-1.

BIGINT

100000000000L, -1L

  • Um inteiro com sinal de 64 bits.

  • Intervalo de valores: -263 a 263-1.

BINARY

  • UNHEX('FA34E10293CB42848573A4E39937F479')

  • X'616263'

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

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

  • Se a string tiver um número ímpar de dígitos, o sistema preenche com um 0 à esquerda. Por exemplo, X'616' equivale a X'0616'.

  • Use aspas simples ('). Aspas duplas (") não são suportadas. Por exemplo, X"616263" não é interpretado como um literal BINARY.

FLOAT

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

  • Um tipo de ponto flutuante binário de 32 bits.

  • O tipo FLOAT pode perder precisão devido à forma como os computadores armazenam e realizam cálculos internos. Se precisar de alta precisão, converta os valores FLOAT para o tipo de dados DECIMAL.

DOUBLE

3.14D, 3.14159261E+7

  • Um tipo de ponto flutuante binário de 64 bits.

  • O tipo DOUBLE pode perder precisão devido à forma como os computadores armazenam e realizam cálculos internos. Se precisar de alta precisão, converta os valores DOUBLE para o tipo de dados DECIMAL.

DECIMAL(precision,scale)

3.5BD, 99999999999.9999999BD

  • Um tipo numérico exato. Você pode especificar a precisão (número total de dígitos) e a escala (número de dígitos à direita do ponto decimal).

    • DECIMAL padrão: a precisão está no intervalo [1, 38] e a escala no intervalo [0, precisão].

    • DECIMAL256: a precisão está no intervalo [39, 76] e a escala no intervalo [0, precisão].

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

VARCHAR(n)

Nenhum

  • Um tipo de caractere de comprimento variável, onde n é o comprimento.

  • Intervalo de valores para n: 1 a 65535.

CHAR(n)

Nenhum

Um tipo de caractere de comprimento fixo n, com valor máximo de 255. Strings mais curtas são preenchidas com espaços até o comprimento definido. Esses espaços à direita são ignorados durante as comparações.

STRING

"abc", 'bcd', "alibaba", 'inc'

  • Um tipo de string.

  • Comprimento máximo: 8 MB.

DATE

DATE'2017-11-11'

  • Um tipo de data. O formato é aaaa-mm-dd.

  • Intervalo de valores: 0001-01-01 a 9999-12-31.

DATETIME

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

  • Um tipo de data e hora.

  • Intervalo de valores: 0001-01-01 00:00:00.000 a 9999-12-31 23:59:59.999, com precisão de milissegundos.

  • Os resultados de consultas DATETIME não exibem milissegundos. Use a opção -dfp nos comandos do Tunnel para especificar um formato que inclua milissegundos, por exemplo, tunnel upload -dfp 'aaaa-MM-dd HH:mm:ss.SSS'. Para mais informações sobre os comandos do Tunnel, consulte Comandos do Tunnel.

TIMESTAMP

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

  • Um tipo de timestamp.

  • Intervalo de valores: 0001-01-01 00:00:00.000000000 a 9999-12-31 23:59:59.999999999, com precisão de nanossegundos.

  • O tipo TIMESTAMP é independente de fuso horário. Ele armazena um ponto específico no tempo como um deslocamento a partir da época Unix (1970-01-01 00:00:00 UTC). Use funções integradas para realizar cálculos com consciência de fuso horário sobre dados TIMESTAMP. Por exemplo, CAST(<a TIMESTAMP> AS STRING) converte um valor TIMESTAMP em STRING com base no fuso horário da sessão atual.

  • Os literais TIMESTAMP também suportam formatos especiais que incluem informações 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'

  • Um tipo de timestamp sem fuso horário.

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

BOOLEAN

True, False

  • Um tipo BOOLEAN.

  • Intervalo de valores: True ou False.

INTERVAL

  • INTERVAL '2021' YEAR

  • INTERVAL '1' DAY

  • INTERVAL '2000-1' YEAR TO MONTH

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

Um tipo de dados que representa um intervalo de tempo entre duas datas ou horas. Inclui dois tipos: INTERVAL_YEAR_MONTH e INTERVAL_DAY_TIME. Para mais informações, consulte Tipo de dados INTERVAL.

Blob

Nenhum

Para mais informações, consulte Tipo de dados Blob e armazenamento multimodal.

VECTOR

[1.1, 2.2, 3.3]

Um tipo de vetor composto por um número fixo de elementos FLOAT. Representa vetores de embeddings de alta dimensão, como as características semânticas de textos ou imagens.

O número de dimensões pode variar de 1 a 4.096. Para mais informações, consulte Tipo de dados VECTOR.

GEOGRAPHY

ST_GEOGPOINT(116.4, 39.9) ST_GEOGFROMTEXT('POINT (10 20)')

Tipo de dados geoespaciais. Usado para representar objetos geométricos na superfície da Terra, como pontos (Point), linhas (LineString) e polígonos (Polygon).

  • Suporta tipos compostos, incluindo MultiPoint, MultiLineString, MultiPolygon e GeometryCollection.

  • As coordenadas são especificadas no formato (longitude, latitude) em graus, seguindo o sistema de coordenadas geográficas WGS84, e implementadas com base na biblioteca S2 Geometry. A longitude deve estar no intervalo [-180, 180] e a latitude no intervalo [-90, 90].

  • Deve ser construído por meio de Funções de Geography. Literais diretos não são suportados. Para mais informações, consulte Tipo de dados GEOGRAPHY.

Observações sobre os tipos de dados:

  • Todos os tipos de dados listados acima podem ser NULL.

  • A palavra-chave INT no SQL é um inteiro de 32 bits.

    -- Convert a to a 32-bit integer.
    CAST(a AS INT)
  • Literais

    • Literais inteiros são tratados como tipo INT por padrão. Por exemplo, em SELECT 1 + a;, o literal inteiro 1 é processado como INT. Se um literal exceder o intervalo de valores de INT, mas estiver dentro do intervalo de BIGINT, será tratado como BIGINT. Se exceder o intervalo de BIGINT, será tratado como DOUBLE.

    • Ao inserir um literal em uma coluna DECIMAL, o literal deve estar em conformidade com o formato especificado na sua definição. Por exemplo, veja o literal 3.5BD no código a seguir.

      INSERT INTO test_tb(a) VALUES (3.5BD)
    • Literais STRING suportam concatenação. Quando dois ou mais literais de string são colocados um ao lado do outro, eles são combinados automaticamente em uma única string. Por exemplo, SELECT 'abc' 'efg' 'ddt'; retorna abcefgddt.

  • Conversão implícita

    • Algumas conversões implícitas estão desativadas. Por exemplo, conversões de STRING para BIGINT, STRING para DATETIME, DOUBLE para BIGINT, DECIMAL para DOUBLE e DECIMAL para BIGINT estão desativadas porque podem causar perda de precisão ou erros. Use a função CAST para realizar essas conversões explicitamente.

    • Literais VARCHAR podem ser convertidos implicitamente em literais STRING.

  • Tabelas, funções e UDFs

    • As funções integradas que aceitam parâmetros da versão 2.0 dos tipos de dados funcionam conforme esperado.

    • Os tipos de dados em uma função definida pelo usuário (UDF) são resolvidos e sobrecarregados com base na versão 2.0 dos tipos de dados.

    • Colunas de partição suportam os tipos de dados STRING, VARCHAR, CHAR, TINYINT, SMALLINT, INT e BIGINT.

Tipos de dados complexos

  • Os tipos de dados complexos no MaxCompute podem ser aninhados em até 20 níveis de profundidade. Para mais informações sobre as funções integradas relacionadas, consulte ARRAY, MAP, STRUCT ou JSON.

  • O tamanho de um tipo de dado complexo não deve exceder 1 MB. Tipos de dados complexos maiores que 1 MB podem causar erros de falta de memória (OOM) durante a computação.

Tipo

Definição

Construtor

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 versões de tipos de dados

  • Diferenças no comportamento da sintaxe DML

    • Comportamento da cláusula LIMIT em operações de conjunto

      Por exemplo, considere a consulta SELECT * FROM t1 UNION ALL SELECT * FROM t2 LIMIT 10;:

      • Na versão 1.0 dos tipos de dados, isso equivale a SELECT * FROM t1 UNION ALL SELECT * FROM ( SELECT * FROM t2 LIMIT 10) t2;.

      • Na versão 2.0 dos tipos de dados, isso equivale a SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2 ) t LIMIT 10;.

      As operações ORDER BY, DISTRIBUTE BY, SORT BY e CLUSTER BY apresentam o mesmo comportamento.

    • Resolução de tipos para expressões IN

      Por exemplo, na expressão a in (1, 2, 3):

      • Na versão 1.0 dos tipos de dados, todos os valores na lista após o IN devem ter o mesmo tipo de dados.

      • Na versão 2.0 dos tipos de dados, os valores precisam apenas ser implicitamente conversíveis para um tipo de dados comum.

    • Regras de conversão de tipo no INSERT

      • No modo compatível com Hive, se um tipo de dados 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 deve ser implicitamente conversível; caso contrário, um erro é retornado.

        O exemplo a seguir é bem-sucedido 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 de comportamento 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, NULL é retornado

    • 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 dígitos restantes 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, um valor DECIMAL é retornado.

      • V1.0 e V2.0: se o parâmetro de entrada for do tipo DECIMAL, um valor BIGINT é retornado.

    • 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: strings de entrada NULL são ignoradas; as strings restantes são concatenadas.

      • V1.0 e V2.0: se qualquer string de entrada for NULL, NULL é retornado.

    • 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: uma string vazia é tratada como não correspondente e 0 é retornado.

    • REGEXP_(EXTRACT/REPLACE)

      • Compatível com Hive: especificações de expressões regulares 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 é o mesmo que quando a posição inicial é 1.

      • Edições de tipos de dados 1.0 e 2.0: quando start_position é 0, uma string vazia é retornada.

      • Edição de tipos de dados compatível com BigQuery: quando start_position é 0, o comportamento é o mesmo que quando a 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 é o mesmo que quando a posição inicial é 1.