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 |
|
SMALLINT | 32767S, -100S |
|
INT | 1000, -15645787 |
|
BIGINT | 100000000000L, -1L |
|
BINARY |
|
|
FLOAT | 3.14F, CAST(3.14159261E+7 AS FLOAT) |
|
DOUBLE | 3.14D, 3.14159261E+7 |
|
DECIMAL(precision,scale) | 3.5BD, 99999999999.9999999BD |
|
VARCHAR(n) | Aucun |
|
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' |
|
DATE | DATE'2017-11-11' |
|
DATETIME | DATETIME'2017-11-11 00:00:00' |
|
TIMESTAMP | TIMESTAMP'2017-11-11 00:00:00.123456789' |
|
TIMESTAMP_NTZ | TIMESTAMP_NTZ '2017-11-11 00:00:00.123456789' |
|
BOOLEAN | True, False |
|
INTERVAL |
| 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 |
| 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).
|
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.5BDdans 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';renvoieabcefgddt.
-
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 |
|
|
MAP |
|
|
STRUCT |
|
|
JSON |
|
|
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
+,-,*,/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 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.
-