MaxCompute SQL met à votre disposition diverses fonctions courantes pour le développement. Sélectionnez la fonction adaptée à vos besoins. Cette rubrique décrit la syntaxe, les paramètres et des exemples d'utilisation des fonctions prises en charge par MaxCompute SQL, telles que CAST, FAILIF et HASH.
|
Fonction |
Fonctionnalités |
|
Filtre les données qui satisfont à la condition de plage spécifiée. |
|
|
Renvoie différentes valeurs selon le résultat d'une expression. |
|
|
Convertit le résultat d'une expression vers un type de données cible. |
|
|
Renvoie la première valeur non NULL d'une liste de paramètres. |
|
|
Compresse un paramètre d'entrée STRING ou BINARY à l'aide de l'algorithme GZIP. |
|
|
Calcule la valeur de contrôle de redondance cyclique (CRC) d'une chaîne ou de données binaires. |
|
|
Décompresse un paramètre d'entrée BINARY à l'aide de l'algorithme GZIP. |
|
|
Renvoie true ou un message d'erreur personnalisé selon le résultat d'une expression. |
|
|
Renvoie l'âge actuel à partir d'un numéro de carte d'identité chinoise. |
|
|
Renvoie la date de naissance à partir d'un numéro de carte d'identité chinoise. |
|
|
Renvoie le sexe à partir d'un numéro de carte d'identité chinoise. |
|
|
Récupère l'ID du compte actuel. |
|
|
Calcule une valeur de hachage à partir des paramètres d'entrée. |
|
|
Vérifie si une condition spécifiée est vraie. |
|
|
Renvoie la valeur maximale de la partition de premier niveau dans une table partitionnée. |
|
|
Détermine si les deux paramètres d'entrée sont égaux. |
|
|
Spécifie la valeur de retour pour un paramètre NULL. |
|
|
Trie les variables d'entrée par ordre croissant et renvoie la valeur à une position spécifiée. |
|
|
Vérifie l'existence d'une partition spécifiée. |
|
|
Échantillonne toutes les valeurs de colonnes lues et filtre les lignes qui ne satisfont pas aux conditions d'échantillonnage. |
|
|
Calcule la valeur de hachage SHA-1 d'une chaîne ou de données binaires. |
|
|
Calcule la valeur de hachage SHA-1 d'une chaîne ou de données binaires. |
|
|
Calcule la valeur de hachage SHA-2 d'une chaîne ou de données binaires. |
|
|
Divise un groupe spécifié de paramètres en un nombre défini de lignes. |
|
|
Divise une chaîne en clés et valeurs selon des séparateurs spécifiés. |
|
|
Vérifie l'existence d'une table spécifiée. |
|
|
Fonction définie par l'utilisateur retournant une table (UDTF) qui convertit une ligne de données en plusieurs lignes. Elle transforme un tableau stocké dans une colonne avec un séparateur fixe en plusieurs lignes. |
|
|
UDTF qui convertit une ligne de données en plusieurs lignes. Elle répartit différentes colonnes sur différentes lignes. |
|
|
Renvoie un ID aléatoire. Cette fonction est plus efficace que la fonction UUID. |
|
|
Renvoie un ID aléatoire. |
Expression BETWEEN AND
-
Syntaxe
<a> [NOT] BETWEEN <b> AND <c> -
Description
Filtre les données dont la valeur de a se situe entre b et c, ou ne se situe pas entre b et c.
-
Paramètres
a : obligatoire. Champ à filtrer.
b et c : obligatoires. Plage spécifiée. Les types de données de b et c doivent correspondre au type de données de a.
-
Valeur de retour
Renvoie les données satisfaisant à la condition.
Si a, b ou c est null, le résultat est null.
-
Exemples
Les données suivantes figurent dans la table
emp.| empno | ename | job | mgr | hiredate| sal| comm | deptno | 7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20 7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30 7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30 7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20 7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30 7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30 7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10 7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20 7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10 7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30 7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20 7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30 7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20 7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10 7948,JACCKA,CLERK,7782,1981-04-12 00:00:00,5000,,10 7956,WELAN,CLERK,7649,1982-07-20 00:00:00,2450,,10 7956,TEBAGE,CLERK,7748,1982-12-30 00:00:00,1300,,10La commande suivante interroge les données dont la valeur de
salest supérieure ou égale à 1000 et inférieure ou égale à 1500.select * from emp where sal between 1000 and 1500;Le résultat suivant est renvoyé.
+-------+-------+-----+------------+------------+------------+------------+------------+ | empno | ename | job | mgr | hiredate | sal | comm | deptno | +-------+-------+-----+------------+------------+------------+------------+------------+ | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250.0 | 500.0 | 30 | | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250.0 | 1400.0 | 30 | | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500.0 | 0.0 | 30 | | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100.0 | NULL | 20 | | 7934 | MILLER | CLERK | 7782 | 1982-01-23 00:00:00 | 1300.0 | NULL | 10 | | 7956 | TEBAGE | CLERK | 7748 | 1982-12-30 00:00:00 | 1300.0 | NULL | 10 | +-------+-------+-----+------------+------------+------------+------------+------------+
Expression CASE WHEN
-
Syntaxe
MaxCompute propose les deux formats
CASE WHENsuivants :-
CASE <value> WHEN <value1> THEN <result1> WHEN <value2> THEN <result2> ... ELSE <resultn> END -
CASE WHEN (<_condition1>) THEN <result1> WHEN (<_condition2>) THEN <result2> WHEN (<_condition3>) THEN <result3> ... ELSE <resultn> END
-
-
Description
Renvoie différentes valeurs de result selon le résultat de value ou de _condition.
-
Paramètres
value : obligatoire. Valeur à comparer.
_condition : obligatoire. Condition à évaluer.
result : obligatoire. Valeur de retour.
-
Valeur de retour
Si result contient uniquement des types BIGINT et DOUBLE, toutes les valeurs sont converties en DOUBLE avant le renvoi du résultat.
Si result inclut le type STRING, toutes les valeurs sont converties au type STRING avant le renvoi du résultat. Si une conversion de type de données n'est pas prise en charge, une erreur est renvoyée. Par exemple, les données de type BOOLEAN ne peuvent pas être converties au type STRING.
Les autres conversions de type ne sont pas autorisées.
-
Exemples
La table
sale_detailcomporte les champsshop_name string, customer_id string, total_price doubleet contient les données suivantes.+------------+-------------+-------------+------------+------------+ | shop_name | customer_id | total_price | sale_date | region | +------------+-------------+-------------+------------+------------+ | s1 | c1 | 100.1 | 2013 | china | | s2 | c2 | 100.2 | 2013 | china | | s3 | c3 | 100.3 | 2013 | china | | null | c5 | NULL | 2014 | shanghai | | s6 | c6 | 100.4 | 2014 | shanghai | | s7 | c7 | 100.5 | 2014 | shanghai | +------------+-------------+-------------+------------+------------+Voici un exemple de commande.
select case when region='china' then 'default_region' when region like 'shang%' then 'sh_region' end as region from sale_detail;Le résultat suivant est renvoyé.
+------------+ | region | +------------+ | default_region | | default_region | | default_region | | sh_region | | sh_region | | sh_region | +------------+
CAST
-
Syntaxe
CAST(<expr> AS <type>) -
Description
Convertit le résultat de expr vers le type de données cible type.
-
Paramètres
expr : obligatoire. Données source à convertir.
-
type : obligatoire. Type de données cible. Utilisation :
cast(double as bigint): convertit une valeur du type de données DOUBLE au type de données BIGINT.cast(string as bigint): lors de la conversion d'une chaîne vers le type de données BIGINT, si la chaîne contient un nombre exprimé sous forme d'entier, elle est directement convertie au type BIGINT. Si la chaîne contient un nombre exprimé sous forme décimale ou exponentielle, elle est d'abord convertie au type de données DOUBLE, puis au type de données BIGINT.cast(string as datetime)oucast(datetime as string): le format de date par défautyyyy-mm-dd hh:mi:ssest utilisé.
-
Valeur de retour
La valeur de retour est du type de données cible.
Si vous exécutez
setproject odps.function.strictmode=false, la fonction renvoie les chiffres précédant les lettres.Si vous exécutez
setproject odps.function.strictmode=true, une erreur est renvoyée.-
Lors de la conversion d'une valeur vers le type DECIMAL, si vous définissez
odps.sql.decimal.tostring.trimzero=true, les zéros non significatifs après la virgule décimale sont supprimés. Si vous définissezodps.sql.decimal.tostring.trimzero=false, les zéros non significatifs après la virgule décimale sont conservés.ImportantLe paramètre
odps.sql.decimal.tostring.trimzeros'applique aux données récupérées depuis les tables ainsi qu'aux valeurs statiques.
-
Exemples
-
Exemple 1 : utilisation courante.
--Returns 1. select cast('1' as bigint); -
Exemple 2 : conversion d'une valeur STRING en valeur BOOLEAN. Si la chaîne STRING est vide,
falseest renvoyé. Sinon,trueest renvoyé.-
La chaîne STRING est vide.
select cast("" as boolean); --Returns +------+ | _c0 | +------+ | false | +------+ -
La chaîne STRING n'est pas vide.
select cast("false" as boolean); --Returns true +------+ | _c0 | +------+ | true | +------+
-
-
Exemple 3 : conversion d'une chaîne en date.
--Convert a string to a date. select cast("2022-12-20" as date); --Returns +------------+ | _c0 | +------------+ | 2022-12-20 | +------------+ --Convert a date string with a time part to a date. select cast("2022-12-20 00:01:01" as date); --Returns +------------+ | _c0 | +------------+ | NULL | +------------+ --To ensure the value is displayed correctly, set the following parameter: set odps.sql.executionengine.enable.string.to.date.full.format= true; select cast("2022-12-20 00:01:01" as date); --Returns +------------+ | _c0 | +------------+ | 2022-12-20 | +------------+RemarquePar défaut, le paramètre
odps.sql.executionengine.enable.string.to.date.full.formatest défini surfalse. Pour convertir une chaîne de date incluant une partie horaire, définissez ce paramètre surtrue. -
Exemple 4 (exemple de commande incorrect) : utilisation invalide. Une exception est levée si une conversion échoue ou n'est pas prise en charge. La commande suivante illustre une utilisation incorrecte.
select cast('abc' as bigint); -
Exemple 5 : scénario où
setproject odps.function.strictmode=falseest défini.setprojectodps.function.strictmode=false; select cast('123abc'as bigint); --Returns +------------+ |_c0| +------------+ |123| +------------+ -
Exemple 6 : scénario où
setproject odps.function.strictmode=trueest défini.setprojectodps.function.strictmode=true; select cast('123abc' as bigint); --Returns FAILED:ODPS-0130071:[0,0]Semanticanalysisexception-physicalplangenerationfailed:java.lang.NumberFormatException:ODPS-0123091:Illegaltypecast-Infunctioncast,value'123abc'cannotbecastedfromStringtoBigint. -
Exemple 7 : scénario où
odps.sql.decimal.tostring.trimzeroest défini.--Create a table. create table mf_dot (dcm1 decimal(38,18), dcm2 decimal(38,18)); --Insert data. insert into table mf_dot values (12.45500BD,12.3400BD); --When the flag is true or not set. set odps.sql.decimal.tostring.trimzero=true; --Remove trailing zeros after the decimal point. select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot; --Return value +------------+------------+ | _c0 | _c1 | +------------+------------+ | 12.455 | 12.34 | +------------+------------+ --When the flag is false. set odps.sql.decimal.tostring.trimzero=false; --Keep trailing zeros after the decimal point. select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot; --Return value +------------+------------+ | _c0 | _c1 | +------------+------------+ | 12.455 | 12.340 | +------------+------------+ --This parameter also applies to static values. set odps.sql.decimal.tostring.trimzero=false; select cast(round(12345.120BD,3) as string); --Returns: +------------+ | _c0 | +------------+ | 12345.120 | +------------+
-
COALESCE
-
Syntaxe
COALESCE(<expr1>, <expr2>, ...) -
Description
Renvoie la première valeur non NULL de la liste
<expr1>, <expr2>, .... -
Paramètres
expr : obligatoire. Valeur à vérifier.
-
Valeur de retour
Le type de données de la valeur de retour correspond aux types de données des paramètres.
-
Exemples
-
Exemple 1 : utilisation courante. Voici un exemple de commande.
--Returns 1. select coalesce(null,null,1,null,3,5,7); -
Exemple 2 : une erreur est renvoyée si le type de données d'une valeur de paramètre n'est pas défini.
-
Commande invalide
-- The data type of the parameter abc is not defined. The system engine cannot recognize it and returns an error. select coalesce(null,null,1,null,abc,5,7); -
Commande valide
select coalesce(null,null,1,null,'abc',5,7);
-
-
Exemple 3 : si toutes les valeurs de paramètre sont null lorsque vous ne lisez pas de données depuis une table, une erreur est renvoyée. Il s'agit d'une commande invalide.
-- An error is returned, indicating that at least one parameter value must be non-NULL. select coalesce(null,null,null,null); -
Exemple 4 : si toutes les valeurs de paramètre sont null lors de la lecture de données depuis une table, NULL est renvoyé.
Table source :
+-----------+-------------+------------+ | shop_name | customer_id | toal_price | +-----------+-------------+------------+ | ad | 10001 | 100.0 | | jk | 10002 | 300.0 | | ad | 10003 | 500.0 | | tt | NULL | NULL | +-----------+-------------+------------+Comme indiqué dans la table source, toutes les valeurs de tt sont null. Après exécution de l'instruction suivante, NULL est renvoyé.
select coalesce(customer_id,total_price) from sale_detail where shop_name='tt';
-
COMPRESS
-
Syntaxe
BINARY COMPRESS(STRING <str>) BINARY COMPRESS(BINARY <bin>) -
Description
Compresse str ou bin à l'aide de l'algorithme GZIP.
-
Paramètres
str : obligatoire. Valeur de type STRING.
bin : obligatoire. Valeur de type BINARY.
-
Valeur de retour
Renvoie une valeur de type BINARY. Si le paramètre d'entrée est NULL, NULL est renvoyé.
-
Exemples
-
-- The return value is =1F=8B=08=00=00=00=00=00=00=03=CBH=CD=C9=C9=07=00=86=A6=106=05=00=00=00. select compress('hello'); -
Exemple 2 : le paramètre d'entrée est une chaîne vide. Voici un exemple de commande.
-- The return value is =1F=8B=08=00=00=00=00=00=00=03=03=00=00=00=00=00=00=00=00=00. select compress(''); -
Exemple 3 : le paramètre d'entrée est NULL. Voici un exemple de commande.
-- Returns NULL. select compress(null);
-
CRC32
-
Syntaxe
BIGINT CRC32(STRING|BINARY <expr>) -
Description
Calcule la valeur de contrôle de redondance cyclique (CRC) de l'expression STRING ou BINARY expr.
-
Paramètres
expr : obligatoire. Valeur de type STRING ou BINARY.
-
Valeur de retour
Renvoie une valeur de type BIGINT. Les règles suivantes s'appliquent :
Si le paramètre d'entrée est NULL, NULL est renvoyé.
Si le paramètre d'entrée est une chaîne vide, 0 est renvoyé.
-
Exemples
-
Exemple 1 : calcule la valeur CRC de la chaîne
ABC. Voici un exemple de commande.-- Returns 2743272264. select crc32('ABC'); -
Exemple 2 : le paramètre d'entrée est NULL. Voici un exemple de commande.
-- Returns NULL. select crc32(null);
-
DECOMPRESS
-
Syntaxe
BINARY DECOMPRESS(BINARY <bin>) -
Description
Décompresse bin à l'aide de l'algorithme GZIP.
-
Paramètres
bin : obligatoire. Valeur de type BINARY.
-
Valeur de retour
Renvoie une valeur de type BINARY. Si le paramètre d'entrée est NULL, NULL est renvoyé.
-
Exemples
-
Exemple 1 : décompresse le résultat compressé de la chaîne
hello, worldet le convertit au format STRING. Voici un exemple de commande.-- Returns hello, world. select cast(decompress(compress('hello, world')) as string); -
Exemple 2 : le paramètre d'entrée est NULL. Voici un exemple de commande.
-- Returns NULL. select decompress(null);
-
GET_IDCARD_AGE
-
Syntaxe
get_idcard_age(<idcardno>) -
Description
Renvoie l'âge actuel à partir d'un numéro de carte d'identité chinoise. L'âge est calculé en soustrayant l'année de naissance extraite du numéro de carte d'identité de l'année en cours.
-
Paramètres
idcardno : obligatoire. Numéro de carte d'identité chinoise à 15 ou 18 chiffres de type STRING. La fonction vérifie la validité du numéro de carte d'identité sur la base du code provincial et du dernier chiffre de contrôle. En cas d'échec de la vérification, NULL est renvoyé.
-
Valeur de retour
Renvoie une valeur de type BIGINT. Si l'entrée est NULL, NULL est renvoyé.
GET_IDCARD_BIRTHDAY
-
Syntaxe
get_idcard_birthday(<idcardno>) -
Description
Renvoie la date de naissance à partir d'un numéro de carte d'identité chinoise.
-
Paramètres
idcardno : obligatoire. Numéro de carte d'identité chinoise à 15 ou 18 chiffres de type STRING. La fonction vérifie la validité du numéro de carte d'identité sur la base du code provincial et du dernier chiffre de contrôle. En cas d'échec de la vérification, NULL est renvoyé.
-
Valeur de retour
Renvoie une valeur de type DATETIME. Si l'entrée est NULL, NULL est renvoyé.
GET_IDCARD_SEX
-
Syntaxe
get_idcard_sex(<idcardno>) -
Description
Renvoie le sexe à partir d'un numéro de carte d'identité chinoise. La valeur est
M(masculin) ouF(féminin). -
Paramètres
idcardno : obligatoire. Numéro de carte d'identité chinoise à 15 ou 18 chiffres de type STRING. La fonction vérifie la validité du numéro de carte d'identité sur la base du code provincial et du dernier chiffre de contrôle. En cas d'échec de la vérification, NULL est renvoyé.
-
Valeur de retour
Renvoie une valeur de type STRING. Si l'entrée est NULL, NULL est renvoyé.
GET_USER_ID
-
Syntaxe
get_user_id() -
Description
Récupère l'ID du compte actuel, également appelé ID utilisateur ou UID.
-
Paramètres
Aucun paramètre requis.
-
Valeur de retour
Renvoie l'ID du compte actuel.
-
Exemples
select get_user_id(); -- The following result is returned. +------------+ | _c0 | +------------+ | 1117xxxxxxxx8519 | +------------+
HASH
-
Syntaxe
-
Si le projet MaxCompute est en mode compatible Hive, la syntaxe est la suivante.
INT HASH(<value1>, <value2>[, ...]); -
Si le projet MaxCompute n'est pas en mode compatible Hive, la syntaxe est la suivante.
BIGINT HASH(<value1>, <value2>[, ...]);
-
-
Description
Calcule la valeur de hachage de value1 et value2.
-
Paramètres
value1 et value2 : obligatoires. Paramètres pour lesquels calculer la valeur de hachage. Les paramètres peuvent être de différents types de données. Les types de données pris en charge varient selon les modes compatible et non compatible Hive :
Mode compatible Hive : TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL, BOOLEAN, STRING, CHAR, VARCHAR, DATETIME et DATE.
Mode non compatible Hive : BIGINT, DOUBLE, BOOLEAN, STRING et DATETIME.
RemarquePour les mêmes entrées, les valeurs de hachage renvoyées sont toujours identiques. Toutefois, si deux valeurs de hachage sont identiques, cela ne garantit pas que les valeurs d'entrée sont les mêmes. Une collision de hachage peut se produire.
-
Valeur de retour
Renvoie une valeur de type INT ou BIGINT. Si un paramètre d'entrée est une chaîne vide ou NULL, 0 est renvoyé.
-
Exemples
-
Exemple 1 : calcul de la valeur de hachage de paramètres d'entrée du même type de données. Voici un exemple de commande.
-- Returns 66. SELECT HASH(0L, 2L, 4L); -
Exemple 2 : calcul de la valeur de hachage de paramètres d'entrée de types de données différents. Voici un exemple de commande.
-- Returns 97. SELECT HASH(0L, 'a'); -
Exemple 3 : un paramètre d'entrée est une chaîne vide ou NULL. Voici un exemple de commande.
-- Returns 0. SELECT HASH(0L, null); -- Returns 0. SELECT HASH(0L, '');
-
IF
-
Syntaxe
IF(<testCondition>, <valueTrue>, <valueFalseOrNull>) -
Description
Vérifie si testCondition est vrai. Si c'est le cas, la fonction renvoie la valeur de valueTrue. Sinon, elle renvoie la valeur de valueFalseOrNull.
-
Paramètres
testCondition : obligatoire. Expression à évaluer. Doit être de type BOOLEAN.
valueTrue : obligatoire. Valeur à renvoyer si l'expression testCondition est vraie.
valueFalseOrNull : valeur à renvoyer si l'expression testCondition est fausse. Peut être définie sur NULL.
-
Valeur de retour
Le type de données de la valeur de retour correspond au type de données du paramètre valueTrue ou valueFalseOrNull.
-
Exemples
-- Returns 200. select if(1=2, 100, 200);
MAX_PT
-
Syntaxe
MAX_PT(<table_full_name>) -
Description
Renvoie la valeur maximale d'une partition de premier niveau contenant des données dans une table partitionnée. Les valeurs sont triées par ordre alphabétique. La fonction lit ensuite les données de cette partition.
-
Notes
-
La fonction
MAX_PTpeut également être implémentée à l'aide de SQL standard.SELECT * FROM table WHERE pt=MAX_PT("table");peut être réécrit sous la formeSELECT * FROM table WHERE pt = (SELECT MAX(pt) FROM table);.RemarqueMaxCompute ne fournit pas de fonction
MIN_PT. Vous ne pouvez pas utiliser l'instruction SQLSELECT * FROM table WHERE pt=MIN_PT("table");pour obtenir une fonctionnalité similaire àMAX_PTafin de récupérer la partition minimale contenant des données. Cependant, vous pouvez utiliser l'instruction SQL standardSELECT * FROM table WHERE pt= (SELECT MIN(pt) FROM table);pour obtenir le même effet. Si toutes les partitions de la table sont vides, la fonction
MAX_PTéchoue. Assurez-vous qu'au moins une partition n'est pas vide.Les tables externes OSS prennent également en charge la fonction MAX_PT. Le comportement est identique à celui des tables internes.
-
-
Paramètres
table_full_name : obligatoire. Valeur de type STRING. Nom de la table. Vous devez disposer des permissions de lecture sur la table.
-
Valeur de retour
Renvoie la valeur de la plus grande partition de premier niveau.
RemarqueSi vous créez une partition uniquement à l'aide de
ALTER TABLEet que la partition ne contient aucune donnée, la partition n'est pas renvoyée. -
Exemples
-
Exemple 1 : la table tbl est une table partitionnée. Ses partitions sont 20120901 et 20120902, et les deux contiennent des données. Dans l'instruction suivante,
MAX_PTrenvoie'20120902'. L'instruction MaxCompute SQL lit les données de la partitionpt='20120902'. Voici un exemple de commande.SELECT * FROM tbl WHERE pt= MAX_PT('tbl'); -- This is equivalent to the following statement. SELECT * FROM tbl WHERE pt= (SELECT MAX(pt) FROM tbl); -
Exemple 2 : dans un scénario de partitionnement multiniveau, utilisez SQL standard pour obtenir les données de la plus grande partition. Voici un exemple de commande.
SELECT * FROM table WHERE pt1 = (SELECT MAX(pt1) FROM table) AND pt2 = (SELECT MAX(pt2) FROM table WHERE pt1= (SELECT MAX(pt1) FROM table));
-
NULLIF
-
Syntaxe
T NULLIF(T <expr1>, T <expr2>) -
Description
Compare les valeurs de expr1 et expr2. Si elles sont égales, la fonction renvoie NULL. Sinon, elle renvoie expr1.
-
Paramètres
expr1 et expr2 : obligatoires. Expressions de tout type.
Tindique le type de données d'entrée. Il peut s'agir de tout type de données pris en charge par MaxCompute. -
Valeur de retour
Renvoie NULL ou expr1.
-
Exemples
-- Returns 2. select nullif(2, 3); -- Returns NULL. select nullif(2, 2); -- Returns 3. select nullif(3, null);
NVL
-
Syntaxe
nvl(T <value>, T <default_value>) -
Description
Si la valeur de value est NULL, la fonction renvoie default_value. Sinon, elle renvoie value. Les deux paramètres doivent être du même type de données.
-
Paramètres
value : obligatoire. Paramètre d'entrée.
Tindique le type de données d'entrée. Il peut s'agir de tout type de données pris en charge par MaxCompute.default_value : obligatoire. Valeur de remplacement. Doit être du même type de données que value.
-
Exemples
La table
t_datacomporte trois colonnes :c1 string,c2 bigintetc3 datetime. La table contient les données suivantes.+----+------------+------------+ | c1 | c2 | c3 | +----+------------+------------+ | NULL | 20 | 2017-11-13 05:00:00 | | ddd | 25 | NULL | | bbb | NULL | 2017-11-12 08:00:00 | | aaa | 23 | 2017-11-11 00:00:00 | +----+------------+------------+Vous pouvez utiliser la fonction
nvlpour afficher 00000 pour les valeurs NULL dansc1, 0 pour les valeurs NULL dansc2et-pour les valeurs NULL dansc3. Voici un exemple de commande.select nvl(c1,'00000'),nvl(c2,0),nvl(c3,'-') from nvl_test; -- The following result is returned. +-----+------------+-----+ | _c0 | _c1 | _c2 | +-----+------------+-----+ | 00000 | 20 | 2017-11-13 05:00:00 | | ddd | 25 | - | | bbb | 0 | 2017-11-12 08:00:00 | | aaa | 23 | 2017-11-11 00:00:00 | +-----+------------+-----+
ORDINAL
-
Syntaxe
ORDINAL(BIGINT <nth>, <var1>, <var2>[,...]) -
Description
Trie les variables d'entrée par ordre croissant et renvoie la valeur à la position nth.
-
Paramètres
nth : obligatoire. Numéro de position, à partir de 1. Valeur de type BIGINT. Si la valeur à la position spécifiée est NULL, NULL est renvoyé.
var : obligatoire. Valeurs à trier. Peuvent être de type BIGINT, DOUBLE, DATETIME ou STRING.
-
Valeur de retour
Valeur à la position nth. En l'absence de conversion implicite, le type de données de la valeur de retour correspond au type de données des paramètres d'entrée.
En cas de conversion de type, une conversion entre DOUBLE, BIGINT et STRING renvoie un type DOUBLE. Une conversion entre STRING et DATETIME renvoie un type DATETIME. Les autres conversions implicites ne sont pas autorisées.
NULL est traité comme la valeur minimale.
-
Exemples
-- Returns 3. SELECT ORDINAL(CAST(3 AS BIGINT), CAST(1 AS BIGINT), cast(3 AS BIGINT), cast(7 AS BIGINT), cast(5 AS BIGINT), cast(2 AS BIGINT), cast(4 AS BIGINT), cast(6 AS BIGINT));
PARTITION_EXISTS
-
Syntaxe
boolean partition_exists(string <table_name>, string... <partitions>) -
Description
Vérifie l'existence d'une partition spécifiée.
-
Paramètres
table_name : obligatoire. Nom de la table. Valeur de type STRING. Le nom de la table peut inclure le nom du projet, par exemple
my_proj.my_table. Si vous ne spécifiez pas de nom de projet, le projet actuel est utilisé par défaut.partitions : obligatoire. Nom de la partition. Valeur de type STRING. Spécifiez les valeurs de partition dans l'ordre des colonnes de clé de partition. Le nombre de valeurs de partition doit correspondre au nombre de colonnes de clé de partition.
-
Valeur de retour
Renvoie une valeur de type BOOLEAN. La fonction renvoie True si la partition spécifiée existe. Sinon, elle renvoie False.
-
Exemples
-- Create a partitioned table named foo. create table foo (id bigint) partitioned by (ds string, hr string); -- Add a partition to the foo table. alter table foo add partition (ds='20190101', hr='1'); -- Query whether the partition ds='20190101' and hr='1' exists. The result is True. select partition_exists('foo', '20190101', '1');
SAMPLE
-
Syntaxe
boolean sample(<x>, <y>, [<column_name1>, <column_name2>[,...]]) -
Description
Le système échantillonne toutes les valeurs lues de column_name selon les paramètres x et y, et filtre les lignes qui ne satisfont pas aux conditions d'échantillonnage.
-
Paramètres
-
x et y : x est obligatoire. Constante BIGINT supérieure à 0. Indique que les données sont hachées en x parties, et que la yème partie est sélectionnée.
y est facultatif. S'il est omis, la première partie est sélectionnée par défaut. Si vous omettez le paramètre y, vous devez également omettre column_name.
Si x ou y est d'un autre type ou inférieur ou égal à 0, une exception est levée. Si y est supérieur à x, une erreur est également renvoyée. Si x ou y est NULL, NULL est renvoyé.
-
column_name : facultatif. Colonne cible pour l'échantillonnage. Si ce paramètre est omis, un échantillonnage aléatoire est effectué selon les valeurs de x et y. Ce paramètre peut être de tout type de données et sa valeur peut être NULL. Aucune conversion de type implicite n'est effectuée. Si column_name est une constante NULL, une erreur est renvoyée.
RemarquePour éviter les déséquilibres de données causés par les valeurs NULL, les valeurs NULL dans column_name sont hachées uniformément en x parties. Si vous ne spécifiez pas column_name, la sortie peut ne pas être uniforme lorsque le volume de données est faible. Dans ce cas, vous pouvez spécifier column_name pour obtenir un meilleur résultat de sortie.
Actuellement, l'échantillonnage aléatoire n'est pris en charge que pour les colonnes des types de données suivants : bigint, datetime, boolean, double, string, binary, char et varchar.
-
-
Valeur de retour
Renvoie une valeur de type BOOLEAN.
-
Exemples
Supposons que la table
tblacontienne une colonne nomméecola.-- The values are hashed into 4 parts based on the cola column, and the 1st part is taken. The return value is True. select * from tbla where sample (4, 1 , cola); -- Each row of data is randomly hashed into 4 parts, and the 2nd part is taken. The return value is True. select * from tbla where sample (4, 2);
SHA
-
Syntaxe
STRING SHA(STRING|BINARY <expr>) -
Description
Calcule la valeur de hachage SHA-1 de l'expression STRING ou BINARY expr et la renvoie sous forme de chaîne hexadécimale.
-
Paramètres
expr : obligatoire. Valeur de type STRING ou BINARY.
-
Valeur de retour
Renvoie une valeur de type STRING. Si le paramètre d'entrée est NULL, NULL est renvoyé.
-
Exemples
-
Exemple 1 : calcule la valeur de hachage SHA de la chaîne
ABC. Voici un exemple de commande.-- Returns 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8. select sha('ABC'); -
Exemple 2 : le paramètre d'entrée est NULL. Voici un exemple de commande.
-- Returns NULL. select sha(null);
-
SHA1
-
Syntaxe
string sha1(string|binary <expr>) -
Description
Calcule la valeur de hachage SHA-1 de l'expression STRING ou BINARY expr et la renvoie sous forme de chaîne hexadécimale.
-
Paramètres
expr : obligatoire. Valeur de type STRING ou BINARY.
-
Valeur de retour
Renvoie une valeur de type STRING. Si le paramètre d'entrée est NULL, NULL est renvoyé.
-
Exemples
-
Exemple 1 : calcule la valeur de hachage SHA-1 de la chaîne
ABC. Voici un exemple de commande.-- Returns 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8. select sha1('ABC'); -
Exemple 2 : le paramètre d'entrée est NULL. Voici un exemple de commande.
-- Returns NULL. select sha1(null);
-
SHA2
-
Syntaxe
string sha2(string|binary <expr>, bigint <number>) -
Description
Calcule la valeur de hachage SHA-2 de l'expression STRING ou BINARY expr et la renvoie au format spécifié par number.
-
Paramètres
expr : obligatoire. Valeur de type STRING ou BINARY.
number : obligatoire. Valeur de type BIGINT. Longueur de bit du hachage. La valeur doit être 224, 256, 384, 512 ou 0 (identique à 256).
-
Valeur de retour
Renvoie une valeur de type STRING. Les règles suivantes s'appliquent :
Si un paramètre d'entrée est NULL, NULL est renvoyé.
Si la valeur de number n'est pas dans la plage autorisée, NULL est renvoyé.
-
Exemples
-
Exemple 1 : calcule la valeur de hachage SHA-2 de la chaîne
ABC. Voici un exemple de commande.-- Returns b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78. select sha2('ABC', 256); -
Exemple 2 : un paramètre d'entrée est NULL. Voici un exemple de commande.
-- Returns NULL. select sha2('ABC', null);
-
STACK
-
Syntaxe
stack(n, expr1, ..., exprk) -
Description
Divise
expr1, ..., exprken n lignes. Sauf indication contraire, la sortie utilise les noms de colonne par défautcol0, col1, .... -
Paramètres
n : obligatoire. Nombre de lignes à générer.
expr : obligatoire. Les paramètres à diviser,
expr1, ..., exprk, doivent être des entiers. Le nombre de paramètres doit être un multiple entier de n pour générer n lignes complètes. Sinon, une erreur est renvoyée.
-
Valeur de retour
Renvoie un ensemble de données comportant n lignes. Le nombre de colonnes correspond au quotient du nombre de paramètres divisé par n.
-
Exemples
-- Arrange 1, 2, 3, 4, 5, 6 into 3 rows. select stack(3, 1, 2, 3, 4, 5, 6); -- The following result is returned. +------+------+ | col0 | col1 | +------+------+ | 1 | 2 | | 3 | 4 | | 5 | 6 | +------+------+ -- Arrange 'A',10,date '2015-01-01','B',20,date '2016-01-01' into two rows. select stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01') as (col0,col1,col2); -- The following result is returned. +------+------+------+ | col0 | col1 | col2 | +------+------+------+ | A | 10 | 2015-01-01 | | B | 20 | 2016-01-01 | +------+------+------+ -- Arrange a, b, c, d into two rows. If the source table has multiple rows, the stack operation is performed row by row. select stack(2,a,b,c,d) as (col,value) from values (1,1,2,3,4), (2,5,6,7,8), (3,9,10,11,12), (4,13,14,15,null) as t(key,a,b,c,d); -- The following result is returned. +------+-------+ | col | value | +------+-------+ | 1 | 2 | | 3 | 4 | | 5 | 6 | | 7 | 8 | | 9 | 10 | | 11 | 12 | | 13 | 14 | | 15 | NULL | +------+-------+ -- Use with LATERAL VIEW. select tf.* from (select 0) t lateral view stack(2,'A',10,date '2015-01-01','B',20, date '2016-01-01') tf as col0,col1,col2; -- The following result is returned. +------+------+------+ | col0 | col1 | col2 | +------+------+------+ | A | 10 | 2015-01-01 | | B | 20 | 2016-01-01 | +------+------+------+
STR_TO_MAP
-
Syntaxe
STR_TO_MAP([STRING <mapDupKeyPolicy>,] <text> [, <delimiter1> [, <delimiter2>]]) -
Description
Utilise delimiter1 pour diviser text en paires clé-valeur, puis utilise delimiter2 pour séparer chaque paire clé-valeur en une clé et une valeur.
-
Paramètres
-
mapDupKeyPolicy : facultatif. Valeur de type STRING. Ce paramètre spécifie la méthode de traitement des clés en double. Valeurs valides :
exception : une erreur est renvoyée.
last_win : la dernière clé écrase la précédente.
Vous pouvez également spécifier le paramètre
odps.sql.map.key.dedup.policyau niveau de la session pour configurer la méthode de traitement des clés en double. Par exemple, vous pouvez définirodps.sql.map.key.dedup.policysur exception. Si vous ne spécifiez pas ce paramètre, la valeur par défaut last_win est utilisée.RemarqueL'implémentation du comportement de MaxCompute est déterminée par mapDupKeyPolicy. Si vous ne spécifiez pas mapDupKeyPolicy, la valeur de
odps.sql.map.key.dedup.policyest utilisée. text : obligatoire. Valeur de type STRING. Chaîne à diviser.
delimiter1 : facultatif. Valeur de type STRING. Séparateur. S'il n'est pas spécifié, la valeur par défaut est une virgule (
,).-
delimiter2 : facultatif. Valeur de type STRING. Séparateur. S'il n'est pas spécifié, la valeur par défaut est un signe égal (
=).RemarqueSi le séparateur est une expression régulière ou un caractère spécial, vous devez l'échapper avec deux barres obliques inverses (\\). Les caractères spéciaux incluent les deux-points (:), le point (.), le point d'interrogation (?), le signe plus (+) et l'astérisque (*).
-
-
Valeur de retour
La valeur de retour est de type
map<string, string>. La valeur de retour correspond au résultat de la division de text par delimiter1 et delimiter2. -
Exemples
-- Returns {test1:1, test2:2}. select str_to_map('test1&1-test2&2','-','&'); -- Returns {test1:1, test2:2}. select str_to_map("test1.1,test2.2", ",", "\\."); -- Returns {test1:1, test2:3}. select str_to_map("test1.1,test2.2,test2.3", ",", "\\.");
TABLE_EXISTS
-
Syntaxe
BOOLEAN TABLE_EXISTS(STRING <table_name>) -
Description
Vérifie l'existence d'une table spécifiée.
-
Paramètres
table_name : obligatoire. Nom de la table. Valeur de type STRING. Le nom de la table peut inclure le nom du projet, par exemple
my_proj.my_table. Si vous ne spécifiez pas de nom de projet, le projet actuel est utilisé par défaut. -
Valeur de retour
Renvoie une valeur de type BOOLEAN. La fonction renvoie True si la table spécifiée existe. Sinon, elle renvoie False.
-
Exemples
-- Use in a SELECT list. select if(table_exists('abd'), col1, col2) from src;
TRANS_ARRAY
-
Limites
Toutes les colonnes utilisées comme
keysdoivent être placées en premier, et les colonnes à transposer doivent être placées après elles.Une instruction
SELECTne peut contenir qu'une seule UDTF. Aucune autre colonne ne peut être incluse.Ne peut pas être utilisée avec
GROUP BY,CLUSTER BY,DISTRIBUTE BYouSORT BY.
-
Syntaxe
TRANS_ARRAY (<num_keys>, <separator>, <key1>,<key2>,…,<col1>,<col2>,<col3>) AS (<key1>,<key2>,...,<col1>, <col2>) -
Description
Fonction définie par l'utilisateur retournant une table (UDTF) qui convertit une ligne de données en plusieurs lignes. Elle transforme un tableau stocké dans une colonne et délimité par un séparateur fixe en plusieurs lignes.
-
Paramètres
num_keys : obligatoire. Constante BIGINT. La valeur doit être
>=0. Nombre de colonnes à utiliser comme transposekeyslors de la conversion en plusieurs lignes.separator : obligatoire. Constante STRING. Séparateur utilisé pour diviser la chaîne en plusieurs éléments. Si ce paramètre est vide, une erreur est renvoyée.
keys : obligatoire. Colonnes à utiliser comme
keyslors de la transposition. Le nombre de colonnes est spécifié par num_keys. Si num_keys spécifie que toutes les colonnes sont utilisées commekeys(c'est-à-dire si num_keys est égal au nombre total de colonnes), une seule ligne est renvoyée.cols : obligatoire. Tableaux à convertir en lignes. Toutes les colonnes situées après les
keyssont considérées comme des tableaux à transposer. Elles doivent être de type STRING et stocker des tableaux au format chaîne, tels queHangzhou;Beijing;Shanghai, qui est un tableau délimité par des points-virgules (;).
-
Valeur de retour
Renvoie les lignes transposées. Les nouveaux noms de colonne sont spécifiés par
AS. Les types de données des colonnes utilisées commekeysrestent inchangés. Toutes les autres colonnes sont de type STRING. Le nombre de lignes résultantes est déterminé par le tableau comportant le plus d'éléments. Les tableaux plus courts sont complétés par NULL. -
Exemples
-
Exemple 1 : la table
t_tablecontient les données suivantes.+----------+----------+------------+ | login_id | login_ip | login_time | +----------+----------+------------+ | wangwangA | 192.168.0.1,192.168.0.2 | 20120101010000,20120102010000 | | wangwangB | 192.168.45.10,192.168.67.22,192.168.6.3 | 20120111010000,20120112010000,20120223080000 | +----------+----------+------------+ -- Run the SQL statement. select trans_array(1, ",", login_id, login_ip, login_time) as (login_id,login_ip,login_time) from t_table; -- The following result is returned. +----------+----------+------------+ | login_id | login_ip | login_time | +----------+----------+------------+ | wangwangB | 192.168.45.10 | 20120111010000 | | wangwangB | 192.168.67.22 | 20120112010000 | | wangwangB | 192.168.6.3 | 20120223080000 | | wangwangA | 192.168.0.1 | 20120101010000 | | wangwangA | 192.168.0.2 | 20120102010000 | +----------+----------+------------+ -- If the table contains the following data. Login_id LOGIN_IP LOGIN_TIME wangwangA 192.168.0.1,192.168.0.2 20120101010000 -- The insufficient data in the array is padded with NULL. Login_id Login_ip Login_time wangwangA 192.168.0.1 20120101010000 wangwangA 192.168.0.2 NULL -
Exemple 2 : la table mf_fun_array_test_t contient les données suivantes.
+------------+------------+------------+------------+ | id | name | login_ip | login_time | +------------+------------+------------+------------+ | 1 | Tom | 192.168.100.1,192.168.100.2 | 20211101010101,20211101010102 | | 2 | Jerry | 192.168.100.3,192.168.100.4 | 20211101010103,20211101010104 | +------------+------------+------------+------------+ -- Use two keys, id and name, to convert to an array. Run the SQL statement. select trans_array(2, ",", Id,Name, login_ip, login_time) as (Id,Name,login_ip,login_time) from mf_fun_array_test_t; -- The following result is returned. The data is split and grouped by the keys id and name. +------------+------------+------------+------------+ | id | name | login_ip | login_time | +------------+------------+------------+------------+ | 1 | Tom | 192.168.100.1 | 20211101010101 | | 1 | Tom | 192.168.100.2 | 20211101010102 | | 2 | Jerry | 192.168.100.3 | 20211101010103 | | 2 | Jerry | 192.168.100.4 | 20211101010104 | +------------+------------+------------+------------+
-
TRANS_COLS
-
Limites
Toutes les colonnes utilisées comme
keysdoivent être placées en premier, et les colonnes à transposer doivent être placées après elles.Une instruction
SELECTne peut contenir qu'une seule UDTF. Aucune autre colonne ne peut être incluse.
-
Syntaxe
TRANS_COLS (<num_keys>, <key1>,<key2>,…,<col1>, <col2>,<col3>) AS (<idx>, <key1>,<key2>,…,<col1>, <col2>) -
Description
UDTF qui convertit une ligne de données en plusieurs lignes. Elle répartit différentes colonnes sur différentes lignes.
-
Paramètres
num_keys : obligatoire. Constante BIGINT. La valeur doit être
>=0. Nombre de colonnes à utiliser comme transpose keys lors de la conversion en plusieurs lignes.keys : obligatoire. Colonnes à utiliser comme keys lors de la transposition. Le nombre de colonnes est spécifié par num_keys. Si num_keys spécifie que toutes les colonnes sont utilisées comme keys (c'est-à-dire si num_keys est égal au nombre total de colonnes), une seule ligne est renvoyée.
idx : obligatoire. Numéro de ligne après conversion.
cols : obligatoire. Colonnes à convertir en lignes.
-
Valeur de retour
Renvoie les lignes transposées. Les nouveaux noms de colonne sont spécifiés par
AS. La première colonne de la sortie est l'index de transposition, qui commence à 1. Les types de données des colonnes utilisées comme clés restent inchangés. Toutes les autres colonnes conservent leurs types de données d'origine. -
Exemples
La table
t_tablecontient les données suivantes.+----------+----------+------------+ | Login_id | Login_ip1 | Login_ip2 | +----------+----------+------------+ | wangwangA | 192.168.0.1 | 192.168.0.2 | +----------+----------+------------+ -- Run the SQL statement. select trans_cols(1, login_id, login_ip1, login_ip2) as (idx, login_id, login_ip) from t_table; -- The following result is returned. idx login_id login_ip 1 wangwangA 192.168.0.1 2 wangwangA 192.168.0.2
UNIQUE_ID
-
Syntaxe
string unique_id() -
Description
Renvoie un ID unique aléatoire, tel que
29347a88-1e57-41ae-bb68-a9edbdd9****_1. Cette fonction est plus efficace que la fonction UUID et renvoie un ID plus long. Par rapport à un UUID, cet ID inclut un trait de soulignement supplémentaire (_) et un nombre, tel que_1.
UUID
-
Syntaxe
string uuid() -
Description
Renvoie un ID aléatoire, tel que
29347a88-1e57-41ae-bb68-a9edbdd9****.RemarqueUUID renvoie un ID global aléatoire dont la probabilité de répétition est très faible.