Tous les produits
Search
Centre de documentation

MaxCompute:Hive-compatible data type edition

Dernière mise à jour :Aug 10, 2026

L'édition compatible Hive des types de données est conçue pour les projets MaxCompute migrés depuis Hadoop, dont les composants dépendants prennent déjà en charge l'édition des types de données MaxCompute V2.0. Elle offre des types de données et un comportement des fonctions qui correspondent étroitement à ceux de Hive, réduisant ainsi les frictions lors de la migration. Comprendre les différences entre cette édition et les éditions MaxCompute V1.0 et V2.0 vous permet d'anticiper les problèmes liés aux types avant leur déploiement en production.

Activer l'édition compatible Hive des types de données

Exécutez les trois commandes suivantes au niveau du projet.

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.

Types de données pris en charge

Aperçu des types

Types entiers : TINYINT (8 bits), SMALLINT (16 bits), INT (32 bits), BIGINT (64 bits)

Types à virgule flottante : FLOAT (32 bits), DOUBLE (64 bits), DECIMAL(précision, échelle) (numérique exact)

Types chaîne : STRING, VARCHAR(n), CHAR(n)

Types date et heure : DATE, DATETIME, TIMESTAMP

Autres types : BOOLEAN, BINARY

Types complexes : ARRAY, MAP, STRUCT (tous imbriquables)

Types de données de base

Types entiers

Type de données

Syntaxe des constantes

Plage

TINYINT

1Y, -127Y

-128 à 127 (entier signé 8 bits)

SMALLINT

32767S, -100S

-32 768 à 32 767 (entier signé 16 bits)

INT

1000, -15645787

-2<sup>31</sup> à 2<sup>31</sup> - 1 (entier signé 32 bits)

BIGINT

100000000000L, -1L

-2<sup>63</sup> + 1 à 2<sup>63</sup> - 1 (entier signé 64 bits)

Les constantes entières utilisent des suffixes de type : Y pour TINYINT, S pour SMALLINT, L pour BIGINT. Les littéraux entiers sans suffixe sont par défaut de type INT. Si la valeur dépasse la plage INT mais tient dans BIGINT, elle est traitée comme BIGINT. Si elle dépasse la plage BIGINT, elle est traitée comme DOUBLE.

Types à virgule flottante

Type de données

Syntaxe des constantes

Description

FLOAT

cast(3.14159261E+7 as float)

Virgule flottante binaire 32 bits

DOUBLE

3.14159261E+7

Virgule flottante binaire 64 bits

DECIMAL(précision, échelle)

3.5BD, 99999999999.9999999BD

Type numérique exact. Par défaut : decimal(10,0). précision : 1–38 ; échelle : 0–18

Les constantes DECIMAL utilisent le suffixe BD. Lors de l'insertion dans une colonne DECIMAL :

insert into test_tb(a) values (3.5BD);

Pour étendre la plage d'échelle DECIMAL de 0–18 à 0–38 :

set odps.sql.decimal2.extended.scale.enable=true;

Types chaîne

Type de données

Syntaxe des constantes

Description

STRING

"abc", 'bcd'

Longueur maximale : 8 Mo

VARCHAR(n)

Aucune

Longueur variable. n : 1–65 535

CHAR(n)

Aucune

Longueur fixe. n maximal : 255. Complété par des espaces si plus court ; le remplissage est ignoré lors des comparaisons

Les constantes chaîne peuvent être concaténées directement. Par exemple, abc et xyz se combinent pour former abcxyz.

Types date et heure

Type de données

Syntaxe des constantes

Plage

DATE

DATE'2017-11-11'

0000-01-01 à 9999-12-31 (format : yyyy-mm-dd)

DATETIME

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

0000-01-01 00:00:00.000 à 9999-12-31 23:59:59.999 (précision milliseconde)

TIMESTAMP

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

0000-01-01 00:00:00.000000000 à 9999-12-31 23:59:59.999999999 (précision nanoseconde, indépendante du fuseau horaire)

Les valeurs DATETIME n'incluent pas la composante milliseconde. Pour inclure les millisecondes lors du chargement des données avec Tunnel, utilisez l'option -dfp :

tunnel upload -dfp 'yyyy-MM-dd HH:mm:ss.SSS'

Pour plus d'informations, consultez Commandes Tunnel.

Le type TIMESTAMP est indépendant du fuseau horaire, mais des fonctions telles que cast(<a timestamp> as string) affichent les valeurs en fonction du fuseau horaire de la session actuelle.

Autres types

Type de données

Syntaxe des constantes

Description

BOOLEAN

True, False

Valeurs booléennes

BINARY

unhex('FA34E10293CB42848573A4E39937F479')

Données binaires. Longueur maximale : 8 Mo

Colonnes de clé de partition

Le type de données d'une colonne de clé de partition peut être STRING, VARCHAR, CHAR, TINYINT, SMALLINT, INT ou BIGINT.

Valeurs NULL

Tous les types de données de base prennent en charge les valeurs NULL.

Conversions implicites

Les conversions suivantes sont désactivées car elles peuvent réduire la précision ou provoquer des erreurs :

Type source

Type cible

Solution de contournement

STRING

BIGINT

Utilisez CAST(value AS BIGINT)

STRING

DATETIME

Utilisez CAST(value AS DATETIME)

DOUBLE

BIGINT

Utilisez CAST(value AS BIGINT)

DECIMAL

DOUBLE

Utilisez CAST(value AS DOUBLE)

DECIMAL

BIGINT

Utilisez CAST(value AS BIGINT)

Les constantes VARCHAR peuvent être implicitement converties en STRING.

Types de données complexes

MaxCompute prend en charge trois types de données complexes dans l'édition compatible Hive. Les types complexes peuvent être imbriqués.

Type de données

Exemples de définition

Exemples de constructeur

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))

Pour les fonctions intégrées qui fonctionnent avec des types complexes, consultez ARRAY, MAP et STRUCT.

Différences par rapport aux autres éditions

L'édition compatible Hive diffère des éditions MaxCompute V1.0 et V2.0 sur les règles INSERT, le comportement des opérateurs et les types de retour des fonctions. Examinez attentivement ces différences lors de la migration depuis Hadoop ou lors de l'exécution du même SQL sur plusieurs éditions.

  • 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 la 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'exemple suivant 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 considéré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 compatible Hive des types de données : Lorsque start_position est 0, le comportement est identique à celui où la position de départ est 1.

      • Éditions des types de données 1.0 et 2.0 : Lorsque start_position est 0, une chaîne vide est renvoyée.

      • Édition compatible BigQuery des types de données : Lorsque start_position est 0, le comportement est identique à celui où la position de départ est 1.

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