Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
S’applique à :
Databricks SQL
Databricks Runtime
Retourne les lignes de résultat triées dans chaque partition Spark dans l’ordre spécifié par l’utilisateur.
Lorsque les données sont réparties sur plusieurs partitions Spark, SORT BY peuvent retourner un résultat partiellement ordonné.
Pour contrôler explicitement la façon dont les données ont été divisées en partitions Spark, utilisez le REPARTITION hint.
Cela est différent de la ORDER BY clause qui garantit une sortie entièrement triée, quelle que soit la façon dont Spark fractionne les données.
Syntaxe
SORT BY { expression [ sort_direction nulls_sort_oder ] } [, ...]
sort_direction
[ ASC | DEC ]
nulls_sort_order
[ NULLS FIRST | NULLS LAST ]
Paramètres
-
Expression de tout type utilisé pour établir un ordre local de partition dans lequel les résultats sont retournés.
Si l’expression est une valeur INT littérale, elle est interprétée comme une position de colonne dans la liste de sélection.
sort_direction
Spécifie l’ordre de tri pour l’expression sort by.
-
ASC: la direction de tri est croissant pour cette expression. -
DESC: l’ordre de tri est croissant pour cette expression.
Si l’ordre de tri n’est pas spécifié explicitement, les lignes par défaut sont triées par ordre croissant.
-
nulls_sort_order
Spécifie éventuellement si les valeurs NULL sont retournées avant/après les valeurs non NULL. Si
null_sort_ordern’est pas spécifié, les valeurs NULL sont triées en premier si l’ordre de tri estASCet les valeurs NULL sont triées en dernier si l’ordre de tri estDESC.-
NULLS FIRST: les valeurs NULL sont retournées en premier, quel que soit l’ordre de tri. -
NULLS LAST: les valeurs NULL sont retournées en dernier, quel que soit l’ordre de tri.
-
Lorsque vous spécifiez plusieurs expressions, le tri s’effectue de gauche à droite. Toutes les lignes de la partition Spark sont triées par la première expression. S’il existe des valeurs en double pour la première expression, la deuxième expression est utilisée pour résoudre l’ordre dans le groupe de doublons, et ainsi de suite. L’ordre résultant n’est pas déterministe s’il existe des valeurs en double dans tous les ordres par expressions.
Exemples
> CREATE TEMP VIEW person (zip_code, name, age)
AS VALUES (94588, 'Zen Hui', 50),
(94588, 'Dan Li', 18),
(94588, 'Anil K', 27),
(94588, 'John V', NULL),
(94511, 'David K', 42),
(94511, 'Aryan B.', 18),
(94511, 'Lalit B.', NULL);
-- Use `REPARTITION` hint to partition the data by `zip_code` to
-- examine the `SORT BY` behavior. This is used in rest of the
-- examples.
-- Sort rows by `name` within each partition in ascending manner
> SELECT /*+ REPARTITION(zip_code) */ name, age, zip_code FROM person
SORT BY name;
Anil K 27 94588
Dan Li 18 94588
John V NULL 94588
Zen Hui 50 94588
Aryan B. 18 94511
David K 42 94511
Lalit B. NULL 94511
-- Sort rows within each partition using column position.
> SELECT /*+ REPARTITION(zip_code) */ name, age, zip_code FROM person
SORT BY 1;
Anil K 27 94588
Dan Li 18 94588
John V null 94588
Zen Hui 50 94588
Aryan B. 18 94511
David K 42 94511
Lalit B. null 94511
-- Sort rows within partition in ascending manner keeping null values to be last.
> SELECT /*+ REPARTITION(zip_code) */ age, name, zip_code FROM person
SORT BY age NULLS LAST;
18 Dan Li 94588
27 Anil K 94588
50 Zen Hui 94588
NULL John V 94588
18 Aryan B. 94511
42 David K 94511
NULL Lalit B. 94511
-- Sort rows by age within each partition in descending manner, which defaults to NULL LAST.
> SELECT /*+ REPARTITION(zip_code) */ age, name, zip_code FROM person
SORT BY age DESC;
50 Zen Hui 94588
27 Anil K 94588
18 Dan Li 94588
NULL John V 94588
42 David K 94511
18 Aryan B. 94511
NULL Lalit B. 94511
-- Sort rows by age within each partition in descending manner keeping null values to be first.
> SELECT /*+ REPARTITION(zip_code) */ age, name, zip_code FROM person
SORT BY age DESC NULLS FIRST;
NULL John V 94588
50 Zen Hui 94588
27 Anil K 94588
18 Dan Li 94588
NULL Lalit B. 94511
42 David K 94511
18 Aryan B. 94511
-- Sort rows within each partition based on more than one column with each column having
-- different sort direction.
> SELECT /*+ REPARTITION(zip_code) */ name, age, zip_code FROM person
SORT BY name ASC, age DESC;
Anil K 27 94588
Dan Li 18 94588
John V null 94588
Zen Hui 50 94588
Aryan B. 18 94511
David K 42 94511
Lalit B. null 94511