Todos os produtos
Search
Central de documentação

MaxCompute:Versão 2.0 dos tipos de dados

Última atualização: Aug 26, 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 data type versions 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 product dependentes suportem a versão 2.0 dos tipos de dados.

Como ative 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

  • Inteiro com sinal de 8 bits.

  • Intervalo de valores: -128 a 127.

SMALLINT

32767S, -100S

  • Inteiro com sinal de 16 bits.

  • Intervalo de valores: -32768 a 32767.

INT

1000, -15645787

  • Inteiro com sinal de 32 bits.

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

BIGINT

100000000000L, -1L

  • Inteiro com sinal de 64 bits.

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

BINARY

  • UNHEX('FA34E10293CB42848573A4E39937F479')

  • X'616263'

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

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

  • Caso a string tenha um número ímpar de dígitos, o sistema adiciona um 0 à esquerda como preenchimento. Por exemplo, X'616' equivale a X'0616'.

  • É obrigatório usar 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)

  • Tipo de ponto flutuante binário de 32 bits.

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

DOUBLE

3.14D, 3.14159261E+7

  • Tipo de ponto flutuante binário de 64 bits.

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

DECIMAL(precision,scale)

3.5BD, 99999999999.9999999BD

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

    • DECIMAL normal: A precisão varia de [1, 38] e a escala de [0, precision].

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

    Para mais informações, consulte DECIMAL data type.

VARCHAR(n)

Nenhum

  • Tipo de caractere de comprimento variável, onde n representa o tamanho.

  • Intervalo de valores para n: 1 a 65535.

CHAR(n)

Nenhum

Tipo de caractere de comprimento fixo n, com valor máximo de 255. Strings mais curtas recebem espaços em branco como preenchimento até atingirem o tamanho definido. Esses espaços à direita são ignorados durante comparações.

STRING

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

  • Tipo de string.

  • Comprimento máximo: 8 MB.

DATE

DATE'2017-11-11'

  • Tipo de data. O formato é yyyy-mm-dd.

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

DATETIME

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

  • 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 especifique um formato que inclua milissegundos, por exemplo, tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'. Para mais informações sobre os comandos do Tunnel, consulte Tunnel commands.

TIMESTAMP

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

  • 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 em relação à época Unix (1970-01-01 00:00:00 UTC). Utilize funções integradas para realizar cálculos que considerem o fuso horário em dados TIMESTAMP. Por exemplo, CAST(<a TIMESTAMP> AS STRING) converte um valor TIMESTAMP para STRING com base no fuso horário da sessão atual.

  • Literais TIMESTAMP também aceitam 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'

  • 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 TIMESTAMP_NTZ data type.

BOOLEAN

True, False

  • 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

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

Blob

Nenhum

Para mais informações, consulte Blob data type and multimodal storage.

VECTOR

[1.1, 2.2, 3.3]

Tipo vetorial composto por um número fixo de elementos FLOAT. Representa vetores de incorporação de alta dimensão, como 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 VECTOR data type.

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 Geography functions. Entrada literal não é suportada. Para mais informações, consulte GEOGRAPHY data type.

Observações sobre os tipos de dados:

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

  • A palavra-chave INT em SQL representa 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. Caso exceda o intervalo de BIGINT, será tratado como DOUBLE.

    • Ao inserir um literal em uma coluna DECIMAL, ele deve obedecer ao formato especificado em sua definição. Veja, por exemplo, o literal 3.5BD no código abaixo.

      INSERT INTO test_tb(a) VALUES (3.5BD)
    • Literais STRING suportam concatenação. Quando dois ou mais literais de string são colocados lado a lado, 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 foram desabilitadas porque podem causar perda de precisão ou erros. Utilize a função CAST para executar essas conversões explicitamente.

    • Literais VARCHAR podem ser convertidos implicitamente para literais STRING.

  • Tabelas, funções e UDFs

    • Funções integradas que aceitam parâmetros da versão 2.0 dos tipos de dados funcionam conforme o 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

  • Tipos de dados complexos no MaxCompute podem ser aninhados em até 20 níveis de profundidade. Para mais informações sobre 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 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 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 tipos no INSERT

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

        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 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, 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 de 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 de 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 de quando a posição inicial é 1.