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 |
|
-128 à 127 (entier signé 8 bits) |
|
SMALLINT |
|
-32 768 à 32 767 (entier signé 16 bits) |
|
INT |
|
-2<sup>31</sup> à 2<sup>31</sup> - 1 (entier signé 32 bits) |
|
BIGINT |
|
-2<sup>63</sup> + 1 à 2<sup>63</sup> - 1 (entier signé 64 bits) |
Les constantes entières utilisent des suffixes de type :Ypour TINYINT,Spour SMALLINT,Lpour 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 |
|
Virgule flottante binaire 32 bits |
|
DOUBLE |
|
Virgule flottante binaire 64 bits |
|
DECIMAL(précision, échelle) |
|
Type numérique exact. Par défaut : |
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 |
|
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 |
|
0000-01-01 à 9999-12-31 (format : |
|
DATETIME |
|
0000-01-01 00:00:00.000 à 9999-12-31 23:59:59.999 (précision milliseconde) |
|
TIMESTAMP |
|
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 |
|
Valeurs booléennes |
|
BINARY |
|
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 |
|
STRING |
DATETIME |
Utilisez |
|
DOUBLE |
BIGINT |
Utilisez |
|
DECIMAL |
DOUBLE |
Utilisez |
|
DECIMAL |
BIGINT |
Utilisez |
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 |
|
|
|
MAP |
|
|
|
STRUCT |
|
|
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
+,-,*,/etPOW: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.
-