Operasi pipa

Berlaku untuk:dicentang ya Databricks SQL dicentang ya Databricks Runtime 16.2 dan versi lebih baru

Memproses hasil kueri sebelumnya menggunakan operasi berantai.

Sintaksis

{ SELECT clause [ GROUP BY grouping_expr [ AS column_alias ] [, ...] ] |
  EXTEND { expression [ [ AS ] column_alias ] } [ , ...] |
  SET { column_name = expression } [, ...] |
  DROP column_name [, ...] |
  AS table_alias |
  WHERE clause |
  { LIMIT clause |
    OFFSET clause |
    LIMIT clause OFFSET clause } |
  aggregation |
  JOIN clause |
  ORDER BY clause |
  set_operator |
  TABLESAMPLE clause
  PIVOT clause
  UNPIVOT clause }

 aggregation
   AGGREGATE aggregate_expr [ [ AS ] column_alias ] [, ...]
   [ GROUP BY grouping_expr [AS column_alias ] ]

Parameter

  • SELECT klausa

    Mengumpulkan kolom-kolom yang akan dikembalikan dari kueri, termasuk pelaksanaan ekspresi, dan deduplikasi.

    Di Databricks Runtime 18.0 atau lebih tinggi, daftar kolom dapat berisi fungsi agregat. Klausa opsional GROUP BY menentukan ekspresi pengelompokan, dan SELECT operator pipa hanya mengembalikan ekspresi sebelum GROUP BY klausa. Jika GROUP BY dihilangkan, semua baris diperlakukan sebagai satu grup. Untuk versi yang lebih lama, gunakan operasi sebagai gantinya AGGREGATE .

    • GROUP BY

      Mengatur berdasarkan ekspresi mana baris dikelompokkan. Jika tidak ditentukan, semua baris diperlakukan sebagai satu grup.

      • grouping_expr

        Ekspresi yang digunakan untuk mengidentifikasi kolom pengelompokan. Lihat GROUP BY untuk informasi selengkapnya.

      • column_alias

        Pengidentifikasi kolom opsional yang memberi nama hasil ekspresi pengelompokan. Jika tidak ada column_alias yang disediakan, Azure Databricks memperolehnya.

  • PERLUAS

    Menambahkan kolom baru ke daftar hasil kueri.

    • ekspresi

      Kombinasi satu atau beberapa nilai, operator, dan fungsi SQL yang mengevaluasi ke nilai.

      expression mungkin berisi referensi ke kolom dalam daftar pemilihan kueri, serta column_alias sebelumnya dalam klausa EXTEND ini.

    • column_alias

      Pengidentifikasi kolom opsional yang memberi nama hasil ekspresi. Jika tidak ada column_alias yang disediakan Azure Databricks mendapatkannya.

  • SET

    Mengganti kolom yang sudah ada dalam daftar pilih kueri dengan nilai baru.

    Operasi ini dilakukan sesuai dengan urutannya dalam klausa SET. Hasil dari setiap ekspresi dapat mengamati kolom yang telah diperbarui oleh ekspresi sebelumnya.

    • nama_kolom

      Nama kolom yang akan diperbarui. Jika kolom tidak ada, Azure Databricks menimbulkan kesalahan UNRESOLVED_COLUMN.

    • ekspresi

      Kombinasi satu atau beberapa nilai, operator, dan fungsi SQL yang mengevaluasi ke nilai.

  • DROP column_name [, ...]

    Menghapus kolom dari daftar seleksi kueri.

    Jika kolom tidak ada, Azure Databricks menimbulkan kesalahan UNRESOLVED_COLUMN.

  • SEBAGAI table_alias

    Menetapkan sebuah nama pada hasil kueri.

  • WHERE

    Memfilter hasil kueri berdasarkan predikat yang disediakan.

  • LIMIT

    Membatasi jumlah maksimum baris yang dapat dikembalikan oleh kueri. Klausa ini biasanya mengikuti ORDER BY untuk menghasilkan hasil deterministik.

  • OFFSET

    Melewati sejumlah baris yang dikembalikan oleh kueri. Klausa ini biasanya digunakan bersama dengan LIMIT ke halaman melalui kumpulan hasil, dan ORDER BY untuk menghasilkan hasil deterministik.

    Nota

    Saat melakukan paging melalui kumpulan hasil menggunakan LIMIT dan OFFSET semua baris diproses, termasuk baris yang dilewati. Namun, hanya subset baris yang ditentukan yang dikembalikan dalam tataan hasil. Penomoran halaman dengan teknik ini tidak disarankan untuk kueri yang memerlukan sumber daya tinggi.

  • agregasi

    Mengagregasi kumpulan hasil kueri berdasarkan ekspresi yang disediakan dan ekspresi pengelompokan opsional.

    Operasi ini menghasilkan tataan hasil tempat kolom pengelompokan muncul sebelum kolom agregat.

    • AGREGAT

      Spesifikasikan ekspresi yang akan diagregasi.

      • aggregate_expr

        Ekspresi yang berisi satu atau beberapa fungsi agregat. Lihat GROUP BY untuk informasi selengkapnya.

    • GROUP BY

      Mengatur berdasarkan ekspresi mana baris dikelompokkan. Jika tidak ditentukan, semua baris diperlakukan sebagai satu grup.

      • grouping_expr

        Ekspresi yang digunakan untuk mengidentifikasi kolom pengelompokan. Lihat GROUP BY untuk informasi selengkapnya.

        Tidak seperti klausa GROUP BY generik, nilai numerik integral mengidentifikasi kolom dalam kueri yang menyediakan input, dan bukan tataan hasil yang dihasilkan.

    • column_alias

      Pengidentifikasi kolom opsional yang memberi nama hasil ekspresi. Jika tidak ada column_alias yang disediakan Azure Databricks mendapatkannya.

  • JOIN

    Menggabungkan dua relasi atau lebih menggunakan operasi join. Lihat JOIN untuk informasi selengkapnya.

  • ORDER BY

    Mengurutkan baris dari kumpulan hasil kueri. Baris output diurutkan di seluruh partisi. Parameter ini saling eksklusif dengan SORT BY, CLUSTER BY, dan DISTRIBUTE BY dan tidak dapat ditentukan bersama-sama.

  • set_operator

    Menggabungkan kueri dengan satu atau beberapa subkueri menggunakan operator UNION, EXCEPT, atau INTERSECT.

  • TABLESAMPLE

    Mengurangi ukuran hasil yang ditetapkan hanya dengan mengambil sampel sebagian kecil dari baris.

  • PIVOT

    Digunakan untuk perspektif data. Anda bisa mendapatkan nilai agregat berdasarkan nilai kolom tertentu. Lihat PIVOT untuk informasi selengkapnya.

  • UNPIVOT

    Digunakan untuk perspektif data. Anda dapat membagi beberapa grup kolom menjadi baris. Lihat UNPIVOT untuk informasi selengkapnya.

Kondisi kesalahan umum

Contoh

-- This query
> FROM customer
  |> LEFT OUTER JOIN orders ON c_custkey = o_custkey
     AND o_comment NOT LIKE '%unusual%packages%'
  |> AGGREGATE COUNT(o_orderkey) c_count
     GROUP BY c_custkey
  |> AGGREGATE COUNT(*) AS custdist
     GROUP BY c_count
  |> ORDER BY custdist DESC, c_count DESC;

is equivalent to:

> SELECT c_count, COUNT(*) AS custdist
  FROM
    (SELECT c_custkey, COUNT(o_orderkey) c_count
     FROM customer
     LEFT OUTER JOIN orders ON c_custkey = o_custkey
       AND o_comment NOT LIKE '%unusual%packages%' GROUP BY c_custkey
    ) AS c_orders
  GROUP BY c_count
  ORDER BY custdist DESC, c_count DESC;

-- Using the SELECT clause following a FROM clause
> CREATE TABLE t AS VALUES (0), (1) AS t(col);

> FROM t
  |> SELECT col * 2 AS result;
 result
 ------
      0
      2

-- Adding columns to the result set
> VALUES (0), (1) tab(col)
  |> EXTEND col * 2 AS result;
 col result
 --- ------
   0      0
   1      2

-- Replacing an expression
> VALUES (0), (1) tab(col)
  |> SET col = col * 2;
 col
 ---
   0
   2

-- Removing a column from the result set
> VALUES (0, 1) tab(col1, col2)
  |> DROP col1;
 col2
 ----
    1

-- Using a table alias
> VALUES (0, 1) tab(col1, col2)
  |> AS new_tab
  |> SELECT col1 + col2 FROM new_tab;
  col1 + col2
            1

-- Filtering the result set
> VALUES (0), (1) tab(col)
  |> WHERE col = 1;
 col
 ---
   1

-- Using LIMIT to truncate the result
> VALUES (0), (0) tab(col)
  |> LIMIT 1;
 col
 ---
   0

-- Full-table aggregation
> VALUES (0), (1) tab(col)
  |> AGGREGATE COUNT(col) AS count;
 count
 -----
     2

-- Aggregation with grouping
> VALUES (0, 1), (0, 2) tab(col1, col2)
  |> AGGREGATE COUNT(col2) AS count GROUP BY col1;
 col1 count
 ---- -----
    0     2

-- Using JOINs
> SELECT 0 AS a, 1 AS b
  |> AS lhs
  |> JOIN VALUES (0, 2) rhs(a, b) ON (lhs.a = rhs.a);
   a   b   c   d
 --- --- --- ---
   0   1   0   2

> VALUES ('apples', 3), ('bananas', 4) t(item, sales)
  |> AS produce_sales
  |> LEFT JOIN
       (SELECT "apples" AS item, 123 AS id) AS produce_data
       USING (item)
  |> SELECT produce_sales.item, sales, id;
   item      sales   id
  --------- ------- ------
  apples    3       123
  bananas   4       NULL

-- Using ORDER BY
> VALUES (0), (1) tab(col)
  |> ORDER BY col DESC;
 col
 ---
   1
   0

> VALUES (0), (1) tab(a, b)
  |> UNION ALL VALUES (2), (3) tab(c, d);
   a    b
 --- ----
   0    1
   2    3

-- Sampling the result set
> VALUES (0), (0), (0), (0) tab(col)
  |> TABLESAMPLE (1 ROWS);
 col
 ---
   0

> VALUES (0), (0) tab(col)
  |> TABLESAMPLE (100 PERCENT);
 col
 ---
   0
   0

-- Pivoting a query
> VALUES
    ("dotNET", 2012, 10000),
    ("Java", 2012, 20000),
    ("dotNET", 2012, 5000),
    ("dotNET", 2013, 48000),
    ("Java", 2013, 30000)
    AS courseSales(course, year, earnings)
  |> PIVOT (
       SUM(earnings)
       FOR COURSE IN ('dotNET', 'Java')
    )
 year dotNET   Java
 ---- ------ ------
 2012  15000  20000
 2013  48000  30000

-- Using | as the pipe token (DBR 18.0 and above)
> CREATE TABLE t AS VALUES (0, 1), (0, 2) AS t(a, b);

> FROM t
  | WHERE a < 2
  | SELECT a, SUM(b) AS total GROUP BY a;
  a  total
  -  -----
  0      3

-- Using SELECT with aggregates and GROUP BY (DBR 18.0 and above)
> VALUES (0, 1), (0, 2), (1, 3) tab(a, b)
  |> SELECT a, SUM(b) AS total GROUP BY a;
 a  total
 -  -----
 0      3
 1      3

-- Full-table aggregation using SELECT (DBR 18.0 and above)
> VALUES (0), (1), (2) tab(col)
  |> SELECT SUM(col) AS total;
 total
 -----
     3

-- Using UNPIVOT
> VALUES
    ("dotNET", 2012, 10000),
    ("Java", 2012, 20000),
    ("dotNET", 2012, 5000),
    ("dotNET", 2013, 48000),
    ("Java", 2013, 30000)
  AS courseSales(course, year, earnings)
  |> UNPIVOT (
    earningsYear FOR `year` IN (`2012`, `2013`, `2014`)
   course   year earnings
 -------- ------ --------
     Java   2012    20000
     Java   2013    30000
   dotNET   2012    15000
   dotNET   2013    48000
   dotNET   2014    22500