Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:
SQL do Databricks
Runtime do Databricks
Retorna as linhas de resultado classificadas em cada partição do Spark na ordem especificada pelo usuário.
Quando os dados são distribuídos entre várias partições do Spark, SORT BY podem retornar um resultado parcialmente ordenado.
Para controlar explicitamente como os dados foram divididos em partições do Spark, use o REPARTITION hint.
Isso é diferente da ORDER BY cláusula que garante uma saída totalmente ordenada, independentemente de como o Spark divide os dados.
Sintaxe
SORT BY { expression [ sort_direction nulls_sort_oder ] } [, ...]
sort_direction
[ ASC | DEC ]
nulls_sort_order
[ NULLS FIRST | NULLS LAST ]
Parâmetros
-
Uma expressão de qualquer tipo usada para estabelecer uma ordem de partição local na qual os resultados são retornados.
Se a expressão for um valor INT literal, ela será interpretada como uma posição de coluna na lista de seleção.
sort_direction
Especifica a ordem de classificação para classificar por expressão.
-
ASC: a direção da classificação para essa expressão é crescente. -
DESC: a ordem de classificação para essa expressão é decrescente.
Se a direção de classificação não for especificada explicitamente, por padrão, as linhas serão classificadas em ordem crescente.
-
nulls_sort_order
Opcionalmente, especifica se valores NULL são retornados antes/depois de valores não NULL. Se
null_sort_ordernão for especificado, os NULLs serão classificados primeiro se a ordem de classificação forASCe classificados por último se a ordem de classificação forDESC.-
NULLS FIRST: os valores NULL serão retornados primeiro, independentemente da ordem de classificação. -
NULLS LAST: os valores NULL serão retornados por último, independentemente da ordem de classificação.
-
Ao especificar mais de uma expressão a classificação ocorre da esquerda para a direita. Todas as linhas dentro da partição spark são classificadas pela primeira expressão. Se houver valores duplicados para a primeira expressão, a segunda expressão será usada para resolver a ordem dentro do grupo de duplicados e assim por diante. A ordem resultante não será determinística se houver valores duplicados em todas as expressões classificar por.
Exemplos
> 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