Megosztás a következőn keresztül:


SORT BY záradék

A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime

A felhasználó által megadott sorrendben az egyes Spark-partíciókon belül rendezett eredménysorokat adja vissza.

Ha az adatok több Spark-partíció között oszlanak el, SORT BY részben rendezett eredményt adhat vissza. Az adatok Spark-partíciókra való felosztásának explicit szabályozásához használja a REPARTITION hint. Ez eltér a ORDER BY záradéktól, amely teljes mértékben rendezett kimenetet garantál, függetlenül attól, hogy a Spark hogyan osztja fel az adatokat.

Syntax

SORT BY { expression [ sort_direction nulls_sort_oder ] } [, ...]

sort_direction
 [ ASC | DEC ]

nulls_sort_order
 [ NULLS FIRST | NULLS LAST ]

Paraméterek

  • kifejezés

    Bármilyen típusú kifejezés, amely egy partíció helyi sorrendjének meghatározására szolgál, amelyben az eredmények lesznek visszaadva.

    Ha a kifejezés egy literális INT-érték, akkor a rendszer oszloppozícióként értelmezi a kijelölési listában.

  • sort_direction

    A rendezés rendezési sorrendjét adja meg kifejezés szerint.

    • ASC: A kifejezés rendezési iránya növekvő.
    • DESC: A kifejezés rendezési sorrendje csökkenő.

    Ha a rendezési irány nincs explicit módon megadva, akkor alapértelmezés szerint a sorok növekvő sorrendbe vannak rendezve.

  • nulls_sort_order

    Opcionálisan megadja, hogy a NULL értékek nem NULL értékek előtt vagy után lesznek-e visszaadva. Ha null_sort_order nincs megadva, akkor az NULL-ek rendeznek először, ha rendezési sorrend vanASC, a NULLS rendezés pedig az utolsó, ha a rendezési sorrend .DESC

    • NULLS FIRST: A null értékeket a rendszer a rendezési sorrendtől függetlenül először adja vissza.
    • NULLS LAST: A NULL értékeket a rendszer a rendezési sorrendtől függetlenül utolsóként adja vissza.

Egynél több kifejezés megadásakor balról jobbra történik a rendezés. A Spark-partíció minden sorát az első kifejezés rendezi. Ha az első kifejezéshez ismétlődő értékek tartoznak, a második kifejezés az ismétlődések csoportján belüli sorrend feloldására szolgál, és így tovább. Az eredményként kapott sorrend nem determinisztikus, ha az összes sorrendben ismétlődő értékek vannak kifejezések szerint.

Példák

> 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