Tous les produits
Search
Centre de documentation

MaxCompute:Version 2.0 des types de données

Dernière mise à jour :Aug 26, 2026

Cette rubrique décrit la version 2.0 des types de données MaxCompute, notamment sa définition, ses cas d'utilisation, les types de données pris en charge et ses différences par rapport aux autres versions.

Contexte

La version 2.0 des types de données est l'une des trois versions des types de données disponibles dans MaxCompute.

Elle convient aux projets MaxCompute dépourvus de données avant avril 2020, à condition que tous les composants de produit dépendants prennent en charge cette version.

Activation de la version 2.0 des types de données

Pour utiliser la version 2.0 des types de données dans un projet, définissez les propriétés suivantes.

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.

Types de données de base

Type

Littéral

Description

TINYINT

1Y, -127Y

  • Entier signé 8 bits.

  • Plage de valeurs : -128 à 127.

SMALLINT

32767S, -100S

  • Entier signé 16 bits.

  • Plage de valeurs : -32768 à 32767.

INT

1000, -15645787

  • Entier signé 32 bits.

  • Plage de valeurs : -231 à 231-1.

BIGINT

100000000000L, -1L

  • Entier signé 64 bits.

  • Plage de valeurs : -263 à 263-1.

BINARY

  • UNHEX('FA34E10293CB42848573A4E39937F479')

  • X'616263'

  • Type de données binaire. Longueur maximale : 8 Mo.

  • Dans le format X'num [...]', num représente un chiffre hexadécimal (0-9 ou A-F). Par exemple, X'616263' correspond à abc, car le code ASCII du caractère 'a' est 0x61, celui de 'b' est 0x62 et celui de 'c' est 0x63. X'616263' équivaut sémantiquement à unhex('616263').

  • Si la chaîne comporte un nombre impair de chiffres, le système la complète avec un 0 initial. Par exemple, X'616' équivaut à X'0616'.

  • Utilisez des guillemets simples ('). Les guillemets doubles (") ne sont pas pris en charge. Par exemple, X"616263" n'est pas interprété comme un littéral BINARY.

FLOAT

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

  • Type à virgule flottante binaire 32 bits.

  • Le type FLOAT peut perdre en précision en raison du stockage et des calculs internes effectués par les ordinateurs. Si vous avez besoin d'une haute précision, convertissez les valeurs FLOAT vers le type DECIMAL.

DOUBLE

3.14D, 3.14159261E+7

  • Type à virgule flottante binaire 64 bits.

  • Le type DOUBLE peut perdre en précision en raison du stockage et des calculs internes effectués par les ordinateurs. Si vous avez besoin d'une haute précision, convertissez les valeurs DOUBLE vers le type DECIMAL.

DECIMAL(precision,scale)

3.5BD, 99999999999.9999999BD

  • Type numérique exact. Vous pouvez spécifier la précision (nombre total de chiffres) et l'échelle (nombre de chiffres à droite de la virgule décimale).

    • DECIMAL normal : la précision se situe dans la plage [1, 38] et l'échelle dans la plage [0, precision].

    • DECIMAL256 : la précision se situe dans la plage [39, 76] et l'échelle dans la plage [0, precision].

    Pour plus d'informations, consultez Type de données DECIMAL.

VARCHAR(n)

Aucun

  • Type de caractère de longueur variable, où n représente la longueur.

  • Plage de valeurs pour n : 1 à 65535.

CHAR(n)

Aucun

Type de caractère de longueur fixe n, avec une valeur maximale de 255. Les chaînes plus courtes sont complétées par des espaces jusqu'à la longueur définie. Ces espaces de fin sont ignorés lors des comparaisons.

STRING

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

  • Type de chaîne.

  • Longueur maximale : 8 Mo.

DATE

DATE'2017-11-11'

  • Type de date. Le format est yyyy-mm-dd.

  • Plage de valeurs : 0001-01-01 à 9999-12-31.

DATETIME

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

  • Type datetime.

  • Plage de valeurs : 0001-01-01 00:00:00.000 à 9999-12-31 23:59:59.999, avec une précision à la milliseconde.

  • Les résultats de requête DATETIME n'affichent pas les millisecondes. Utilisez l'option -dfp dans les commandes Tunnel pour spécifier un format incluant les millisecondes, par exemple tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'. Pour plus d'informations sur les commandes Tunnel, consultez Commandes Tunnel.

TIMESTAMP

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

  • Type timestamp.

  • Plage de valeurs : 0001-01-01 00:00:00.000000000 à 9999-12-31 23:59:59.999999999, avec une précision à la nanoseconde.

  • Le type TIMESTAMP est indépendant du fuseau horaire. Il stocke un instant précis sous forme de décalage par rapport à l'époque Unix (1970-01-01 00:00:00 UTC). Utilisez les fonctions intégrées pour effectuer des calculs tenant compte du fuseau horaire sur les données TIMESTAMP. Par exemple, CAST(<a TIMESTAMP> AS STRING) convertit une valeur TIMESTAMP en STRING selon le fuseau horaire de la session actuelle.

  • Les littéraux TIMESTAMP prennent également en charge des formats spéciaux incluant des informations de fuseau horaire, tels que : TIMESTAMP '2025-02-25T12:09:35', TIMESTAMP '2025-02-25 12:09:35+07:00' et TIMESTAMP '2025-02-25 12:09:35Z'.

TIMESTAMP_NTZ

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

  • Type timestamp sans fuseau horaire.

  • Plage de valeurs : 0000-01-01 00:00:00.000000000 à 9999-12-31 23:59:59.999999999. Pour plus d'informations sur le type de données TIMESTAMP_NTZ, consultez Type de données TIMESTAMP_NTZ.

BOOLEAN

True, False

  • Type BOOLEAN.

  • Plage de valeurs : 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

Type de données représentant un intervalle de temps entre deux dates ou heures. Il comprend deux types : INTERVAL_YEAR_MONTH et INTERVAL_DAY_TIME. Pour plus d'informations, consultez Type de données INTERVAL.

Blob

Aucun

Pour plus d'informations, consultez Type de données Blob et stockage multimodal.

VECTOR

[1.1, 2,2, 3,3]

Type de vecteur composé d'un nombre fixe d'éléments FLOAT. Il représente des vecteurs d'embedding de haute dimension, tels que les caractéristiques sémantiques du texte ou des images.

Le nombre de dimensions peut varier de 1 à 4 096. Pour plus d'informations, consultez Type de données VECTOR.

GEOGRAPHY

ST_GEOGPOINT(116,4, 39,9) ST_GEOGFROMTEXT('POINT (10 20)')

Type de données géospatiales. Utilisé pour représenter des objets géométriques à la surface de la Terre, tels que des points (Point), des lignes (LineString) et des polygones (Polygon).

  • Prend en charge les types composites, notamment MultiPoint, MultiLineString, MultiPolygon et GeometryCollection.

  • Les coordonnées sont spécifiées au format (longitude, latitude) en degrés, selon le système de coordonnées géographiques WGS84, et implémentées sur la base de la bibliothèque S2 Geometry. La longitude doit se situer dans la plage [-180, 180] et la latitude dans la plage [-90, 90].

  • Doit être construit via les fonctions Geography. L'entrée de littéraux n'est pas prise en charge. Pour plus d'informations, consultez Type de données GEOGRAPHY.

Remarques sur les types de données :

  • Tous les types de données répertoriés ci-dessus peuvent avoir la valeur NULL.

  • Le mot-clé INT en SQL correspond à un entier 32 bits.

    -- Convert a to a 32-bit integer.
    CAST(a AS INT)
  • Littéraux

    • Par défaut, les littéraux entiers sont traités comme le type INT. Par exemple, dans SELECT 1 + a;, le littéral entier 1 est traité comme un INT. Si un littéral dépasse la plage de valeurs de INT mais reste dans celle de BIGINT, il est traité comme un BIGINT. S'il dépasse la plage de BIGINT, il est traité comme un DOUBLE.

    • Lorsque vous insérez un littéral dans une colonne DECIMAL, le littéral doit respecter le format spécifié dans sa définition. Par exemple, voir le littéral 3.5BD dans le code suivant.

      INSERT INTO test_tb(a) VALUES (3.5BD)
    • Les littéraux STRING prennent en charge la concaténation. Lorsque deux littéraux de chaîne ou plus sont placés côte à côte, ils sont automatiquement combinés en une seule chaîne. Par exemple, SELECT 'abc' 'efg' 'ddt'; renvoie abcefgddt.

  • Conversion implicite

    • Certaines conversions implicites sont désactivées. Par exemple, les conversions de STRING vers BIGINT, de STRING vers DATETIME, de DOUBLE vers BIGINT, de DECIMAL vers DOUBLE et de DECIMAL vers BIGINT sont désactivées car elles peuvent entraîner une perte de précision ou des erreurs. Utilisez la fonction CAST pour effectuer ces conversions explicitement.

    • Les littéraux VARCHAR peuvent être implicitement convertis en littéraux STRING.

  • Tables, fonctions et UDF

    • Les fonctions intégrées qui acceptent des paramètres de la version 2.0 des types de données fonctionnent comme prévu.

    • Les types de données dans une fonction définie par l'utilisateur (UDF) sont résolus et surchargés en fonction de la version 2.0 des types de données.

    • Les colonnes de partition prennent en charge les types de données STRING, VARCHAR, CHAR, TINYINT, SMALLINT, INT et BIGINT.

Types de données complexes

  • Les types de données complexes dans MaxCompute peuvent être imbriqués jusqu'à 20 niveaux de profondeur. Pour plus d'informations sur les fonctions intégrées associées, consultez ARRAY, MAP, STRUCT ou JSON.

  • La taille d'un type de données complexe ne doit pas dépasser 1 Mo. Les types de données complexes supérieurs à 1 Mo peuvent provoquer des erreurs de mémoire insuffisante (OOM) lors du calcul.

Type

Définition

Constructeur

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'

Différences par rapport aux autres versions des types de données

  • Différences de comportement de la syntaxe DML

    • Comportement de la clause LIMIT dans les opérations d'ensemble

      Prenons par exemple la requête SELECT * FROM t1 UNION ALL SELECT * FROM t2 LIMIT 10; :

      • Dans la version 1.0 des types de données, cela équivaut à SELECT * FROM t1 UNION ALL SELECT * FROM ( SELECT * FROM t2 LIMIT 10) t2;.

      • Dans la version 2.0 des types de données, cela équivaut à SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2 ) t LIMIT 10;.

      Les opérations ORDER BY, DISTRIBUTE BY, SORT BY et CLUSTER BY présentent le même comportement.

    • Résolution de type pour les expressions IN

      Prenons par exemple l'expression a in (1, 2, 3) :

      • Dans la version 1.0 des types de données, toutes les valeurs de la liste suivant IN doivent avoir le même type de données.

      • Dans la version 2.0 des types de données, les valeurs doivent uniquement être implicitement convertibles vers un type de données commun.

    • Règles de conversion de type INSERT

      • En mode compatible Hive, si un type de données source peut être explicitement converti vers le type de colonne cible, MaxCompute insère automatiquement une fonction de conversion et l'exécute.

      • Dans les modes V1.0 et V2.0, le type source doit être implicitement convertible ; sinon, une erreur est renvoyée.

        L'opération suivante réussit en mode compatible Hive mais échoue dans les modes V1.0 et V2.0 :

        CREATE TABLE t (a BIGINT);
        INSERT INTO TABLE SELECT 1.5;
  • Différences de comportement des opérateurs et des fonctions selon les éditions des types de données

    • Pour les opérateurs +, -, *, / et POW :

      • Compatible Hive : renvoie la valeur initiale

      • V1.0 et V2.0 : renvoie une erreur ; dans les autres modes, NULL est renvoyé

    • Pour les opérateurs >, >=, =, < et <= appliqués aux valeurs DOUBLE :

      • Compatible Hive : compare tous les chiffres directement

      • V1.0 et V2.0 : compare uniquement les 15 premiers chiffres à droite de la virgule décimale ; les chiffres restants sont ignorés

    • Pour les opérateurs &, | et ^ :

      • Compatible Hive : même type que l'entrée

      • V1.0 et V2.0 : toujours BIGINT

    • Pour les fonctions telles que : LENGTH, LENGTHB, FIND_IN_SET, INSTR, SIZE, HASH, SIGN

      • Compatible Hive : renvoie une valeur INT.

      • V1.0 et V2.0 : renvoie une valeur BIGINT.

    • FLOOR, CEIL

      • Compatible Hive : si le paramètre d'entrée est de type DECIMAL, une valeur DECIMAL est renvoyée.

      • V1.0 et V2.0 : si le paramètre d'entrée est de type DECIMAL, une valeur BIGINT est renvoyée.

    • FROM_UNIXTIME

      • Compatible Hive : renvoie une valeur STRING.

      • V1.0 et V2.0 : renvoie une valeur DATETIME.

    • CONCAT_WS

      • Compatible Hive : les chaînes d'entrée NULL sont ignorées ; les chaînes restantes sont concaténées.

      • V1.0 et V2.0 : si une chaîne d'entrée est NULL, NULL est renvoyé.

    • FIND_IN_SET

      • Compatible Hive : une chaîne vide correspond à la fin de la chaîne de recherche :

        find_in_set("","")    -- Returns 1
        find_in_set("", "a,") -- Returns 2
      • V1.0 et V2.0 : une chaîne vide est traitée comme non correspondante et 0 est renvoyé.

    • REGEXP_(EXTRACT/REPLACE)

      • Compatible Hive : spécifications des expressions régulières Java

      • V1.0 et V2.0 : spécifications MaxCompute

    • SUBSTR

      STRING SUBSTR(STRING <string>, BIGINT <start_position>[, BIGINT <length>])

      start_position : Obligatoire. Type BIGINT. La position de départ par défaut est 1.

      • Édition de type de données compatible Hive : lorsque start_position est 0, le comportement est identique à celui lorsque la position de départ est 1.

      • Éditions de type de données 1,0 et 2,0 : lorsque start_position est 0, une chaîne vide est renvoyée.

      • Édition de type de données compatible BigQuery : lorsque start_position est 0, le comportement est identique à celui lorsque la position de départ est 1.

      • Édition de type de données compatible BigQuery : lorsque start_position est inférieur à la longueur négative de la chaîne, le comportement est identique à celui lorsque la position de départ est 1.