Aracılığıyla paylaş


SORT BY yan tümcesi

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime

Her Spark bölümü içinde kullanıcı tarafından belirtilen düzende sıralanmış sonuç satırlarını döndürür.

Veriler birden çok Spark bölümüne yayıldığında, SORT BY kısmen sıralı bir sonuç döndürebilir. Verilerin Spark bölümlerine nasıl bölündüğünü açıkça denetlemek için REPARTITION hintkullanın. Bu, Spark'ın verileri nasıl böldüğünden bağımsız olarak tam olarak sıralanmış bir çıktıyı garanti eden ORDER BY yan tümcesinden farklıdır.

Sözdizimi

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

sort_direction
 [ ASC | DEC ]

nulls_sort_order
 [ NULLS FIRST | NULLS LAST ]

Parametreler

  • ifade

    Sonuçların döndürüldüğü bölüm yerel sırasını oluşturmak için kullanılan herhangi bir türde ifade.

    İfade değişmez bir INT değeriyse, seçme listesinde sütun konumu olarak yorumlanır.

  • sort_direction

    İfadeye göre sıralama düzenini belirtir.

    • ASC: Bu ifadenin sıralama yönü artandır.
    • DESC: Bu ifadenin sıralama düzeni azalan düzendedir.

    Sıralama yönü açıkça belirtilmezse, varsayılan olarak satırlar artan düzende sıralanır.

  • nulls_sort_order

    İsteğe bağlı olarak NULL değerlerin NULL olmayan değerlerden önce/sonra döndürülip döndürülmeyeceğini belirtir. Belirtilmezse null_sort_order , sıralama düzeni ise NULL'ler önce sıralanır ve sıralama düzeni ASC ise NULLS en son sıralanır DESC.

    • NULLS FIRST: Sıralama düzeninden bağımsız olarak önce NULL değerler döndürülür.
    • NULLS LAST: NULL değerler sıralama düzeninden bağımsız olarak en son döndürülür.

Birden fazla ifadeyi belirtirken sıralama soldan sağa gerçekleşir. Spark bölümündeki tüm satırlar ilk ifadeye göre sıralanır. İlk ifade için yinelenen değerler varsa, ikinci ifade yinelenenler grubu içindeki sırayı çözümlemek için kullanılır ve bu şekilde devam eder. Elde edilen sıra, ifadelere göre tüm düzende yinelenen değerler varsa belirleyici değildir.

Örnekler

> 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