Bagikan melalui


Petunjuk

Berlaku untuk: centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime

Sarankan pendekatan khusus untuk membuat rencana eksekusi.

Sintaks

/*+ { partition_hint | join_hint | skew_hint } [, ...] */

Petunjuk pemartisian

Petunjuk partisi memungkinkan Anda menyarankan strategi pemartisian yang harus diikuti Azure Databricks. Petunjuk COALESCE, REPARTITION, dan REPARTITION_BY_RANGE didukung dan setara dengan masing-masing API Himpunan data coalesce, repartition, dan repartitionByRange. Petunjuk ini memberi Anda cara untuk menyetel performa dan mengontrol jumlah file output. Saat beberapa petunjuk pemartisian ditentukan, beberapa node dimasukkan ke dalam rencana logis, tetapi petunjuk paling kiri dipilih oleh pengoptimal.

Sintaks

partition_hint
  COALESCE ( part_num ) |
  REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } ) |
  REPARTITION_BY_RANGE ( column_name [, ...] [, part_num] ) |
  REBALANCE [ ( column_name [, ...] ) ]

Jenis petunjuk partisi

  • COALESCE ( part_num )

    Kurangi jumlah partisi ke jumlah partisi yang ditentukan. Dibutuhkan nomor partisi sebagai parameter.

  • REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } )

    Partisi ulang ke jumlah partisi yang ditentukan menggunakan ekspresi pemartisian yang ditentukan. Dibutuhkan nomor partisi, nama kolom, atau keduanya sebagai parameter.

  • REPARTITION_BY_RANGE ( column_name [, ...] [, part_num]

    Partisi ulang ke jumlah partisi yang ditentukan menggunakan ekspresi pemartisian yang ditentukan. Dibutuhkan nama kolom dan nomor partisi opsional sebagai parameter.

  • REBALANCE [ ( column_name [, ...] ) ]

    Petunjuk REBALANCE dapat digunakan untuk menyeimbangkan kembali partisi output hasil kueri, sehingga setiap partisi memiliki ukuran yang wajar (tidak terlalu kecil atau besar). Ini dapat mengambil nama kolom sebagai parameter, dan mencoba yang terbaik untuk mempartisi hasil kueri oleh kolom ini. Ini adalah upaya terbaik: jika ada kemiringan, Spark akan membagi partisi miring, untuk membuat partisi ini tidak terlalu besar. Petunjuk ini berguna saat Anda perlu menulis hasil kueri ini ke tabel, guna menghindari file yang terlalu kecil/besar. Petunjuk ini diabaikan jika AQE tidak diaktifkan.

  • column_name

    Nama kolom atau alias yang diekspos untuk partisi ulang atau penyeimbangan ulang.

  • part_num

    Angka integral harfiah. Jumlah partisi yang akan dipartisi ulang.

Contoh

> SELECT /*+ COALESCE(3) */ * FROM t;

> SELECT /*+ REPARTITION(3) */ * FROM t;

> SELECT /*+ REPARTITION(c) */ * FROM t;

> SELECT /*+ REPARTITION(3, c) */ * FROM t;

> SELECT /*+ REPARTITION_BY_RANGE(c) */ * FROM t;

> SELECT /*+ REPARTITION_BY_RANGE(3, c) */ * FROM t;

> SELECT /*+ REBALANCE */ * FROM t;

> SELECT /*+ REBALANCE(c) */ * FROM t;

-- When a column name has been occluded by an alias you must refere to it by the alias name.
> SELECT /*+ REBALANCE(d) */ * FROM t AS s(d);

-- multiple partitioning hints
> EXPLAIN EXTENDED SELECT /*+ REPARTITION(100), COALESCE(500), REPARTITION_BY_RANGE(3, c) */ * FROM t;
== Parsed Logical Plan ==
'UnresolvedHint REPARTITION, [100]
+- 'UnresolvedHint COALESCE, [500]
   +- 'UnresolvedHint REPARTITION_BY_RANGE, [3, 'c]
      +- 'Project [*]
         +- 'UnresolvedRelation [t]

== Analyzed Logical Plan ==
name: string, c: int
Repartition 100, true
+- Repartition 500, false
   +- RepartitionByExpression [c#30 ASC NULLS FIRST], 3
      +- Project [name#29, c#30]
         +- SubqueryAlias spark_catalog.default.t
            +- Relation[name#29,c#30] parquet

== Optimized Logical Plan ==
Repartition 100, true
+- Relation[name#29,c#30] parquet

== Physical Plan ==
Exchange RoundRobinPartitioning(100), false, [id=#121]
+- *(1) ColumnarToRow
   +- FileScan parquet default.t[name#29,c#30] Batched: true, DataFilters: [], Format: Parquet,
      Location: CatalogFileIndex[file:/spark/spark-warehouse/t], PartitionFilters: [],
      PushedFilters: [], ReadSchema: struct<name:string>

Petunjuk gabungan

Petunjuk gabung memungkinkan Anda untuk menyarankan strategi bergabung yang harus digunakan Databricks SQL. Ketika petunjuk strategi gabung yang berbeda ditentukan di kedua sisi gabung, Databricks SQL memprioritaskan petunjuk dalam urutan berikut: BROADCAST dari MERGE dari SHUFFLE_HASH dari SHUFFLE_REPLICATE_NL. Ketika kedua sisi ditentukan dengan petunjuk BROADCAST atau petunjuk SHUFFLE_HASH, Databricks SQL memilih sisi build berdasarkan jenis gabungan dan ukuran hubungan. Karena strategi tertentu mungkin tidak mendukung semua jenis gabungan, Databricks SQL tidak dijamin untuk menggunakan strategi gabungan yang disarankan oleh petunjuk.

Sintaks

join_hint
  BROADCAST ( table_name ) |
  MERGE ( table_name ) |
  SHUFFLE_HASH ( table_name ) |
  SHUFFLE_REPLICATE_NL ( table_name )

BROADCASTJOIN dan MAPJOIN didukung sebagai alias untuk BROADCAST.

SHUFFLE_MERGE dan MERGEJOIN didukung sebagai alias untuk MERGE.

Tipe petunjuk gabung

  • BROADCAST ( table_name )

    Gunakan gabungan siaran. Sisi bergabung dengan petunjuk disiarkan terlepas dari autoBroadcastJoinThreshold. Jika kedua sisi bergabung memiliki petunjuk siaran, sisi dengan ukuran lebih kecil (berdasarkan statistik) disiarkan.

  • MERGE ( table_name )

    Gunakan join gabungan pengurutan acak.

  • SHUFFLE_HASH ( table_name )

    Gunakan join hash acak. Jika kedua belah pihak memiliki petunjuk hash acak, Databricks SQL memilih sisi yang lebih kecil (berdasarkan statistik) sebagai sisi build.

  • SHUFFLE_REPLICATE_NL ( table_name )

    Gunakan gabungan perulangan bertumpuk acak-dan-replika.

  • table_name

    Nama tabel atau alias tabel yang diekspos yang diterapkan petunjuk.

Contoh

-- Join Hints for broadcast join
> SELECT /*+ BROADCAST(t1) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;
> SELECT /*+ BROADCASTJOIN (t1) */ * FROM t1 left JOIN t2 ON t1.key = t2.key;
> SELECT /*+ MAPJOIN(t2) */ * FROM t1 right JOIN t2 ON t1.key = t2.key;

-- Join Hints for shuffle sort merge join
> SELECT /*+ SHUFFLE_MERGE(t1) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;
> SELECT /*+ MERGEJOIN(t2) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;
> SELECT /*+ MERGE(t1) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;

-- Join Hints for shuffle hash join
> SELECT /*+ SHUFFLE_HASH(t1) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;

-- Join Hints for shuffle-and-replicate nested loop join
> SELECT /*+ SHUFFLE_REPLICATE_NL(t1) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;

-- When different join strategy hints are specified on both sides of a join, Databricks SQL
-- prioritizes the BROADCAST hint over the MERGE hint over the SHUFFLE_HASH hint
-- over the SHUFFLE_REPLICATE_NL hint.
-- Databricks SQL will issue Warning in the following example
-- org.apache.spark.sql.catalyst.analysis.HintErrorLogger: Hint (strategy=merge)
-- is overridden by another hint and will not take effect.
> SELECT /*+ BROADCAST(t1), MERGE(t1, t2) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;

-- When a table name is occluded by an alias you must use the alias name in the hint
> SELECT /*+ BROADCAST(t1), MERGE(s1, s2) */ * FROM t1 AS s1 INNER JOIN t2 AS s2 ON s1.key = s2.key;

Petunjuk skew

(Delta Lake) Lihat Pengoptimalan gabungan condong menggunakan petunjuk condong untuk informasi tentang petunjuk.SKEW