تلميحات

ينطبق على:check marked yes Databricks SQL check marked yes Databricks Runtime

اقتراح نهج محددة لإنشاء خطة تنفيذ.

بناء الجملة

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

تلميحات التقسيم

تسمح لك تلميحات التقسيم باقتراح استراتيجية تقسيم يجب أن تتبعها Azure Databricks. COALESCEREPARTITIONيتم دعم و و REPARTITION_BY_RANGE و تلميحات وهي مكافئة لواجهات repartitioncoalesceبرمجة تطبيقات مجموعة البيانات و و repartitionByRange على التوالي. تمنحك هذه التلميحات طريقة لضبط الأداء والتحكم في عدد ملفات الإخراج. عند تحديد تلميحات تقسيم متعددة، يتم إدراج عقد متعددة في الخطة المنطقية، ولكن يتم اختيار التلميح الموجود في أقصى اليسار بواسطة المحسن.

بناء الجملة

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

تقسيم أنواع التلميحات

  • COALESCE ( part_num )

    تقليل عدد الأقسام إلى العدد المحدد من الأقسام. يأخذ رقم قسم كمعلمة.

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

    إعادة تقسيم إلى العدد المحدد من الأقسام باستخدام تعبيرات التقسيم المحددة. يأخذ رقم القسم أو أسماء الأعمدة أو كليهما كمعلمات.

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

    إعادة تقسيم إلى العدد المحدد من الأقسام باستخدام تعبيرات التقسيم المحددة. يأخذ أسماء الأعمدة ورقم القسم الاختياري كمعلمات.

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

    REBALANCE يمكن استخدام التلميح لإعادة توازن أقسام إخراج نتيجة الاستعلام، بحيث يكون كل قسم بحجم معقول (ليس صغيرا جدا وليس كبيرا جدا). يمكن أن تأخذ أسماء الأعمدة كمعلمات، وتبذل قصارى جهدها لتقسيم نتيجة الاستعلام حسب هذه الأعمدة. هذا هو أفضل جهد: إذا كان هناك انحرافات، سيقوم Spark بتقسيم الأقسام المنحرفة، لجعل هذه الأقسام ليست كبيرة جدا. هذا التلميح مفيد عندما تحتاج إلى كتابة نتيجة هذا الاستعلام إلى جدول، لتجنب الملفات الصغيرة/الكبيرة جدا. يتم تجاهل هذا التلميح إذا لم يتم تمكين AQE.

  • column_name

    الاسم المكشوف لعمود أو اسم مستعار لإعادة تقسيمه أو إعادة توازنه بواسطة.

  • part_num

    قيمة حرفية لرقم لا يتجزأ. عدد الأقسام التي يجب إعادة تقسيمها إليها.

الأمثلة

> 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>

الانضمام إلى التلميحات

تسمح لك تلميحات الانضمام باقتراح استراتيجية الانضمام التي يجب أن تستخدمها Databricks SQL. عند تحديد تلميحات استراتيجية صلة مختلفة على جانبي الصلة، يعطي Databricks SQL الأولوية للتلميحات بالترتيب التالي: BROADCAST عبر MERGESHUFFLE_HASH .SHUFFLE_REPLICATE_NL عند تحديد كلا الجانبين بالتلميح BROADCAST أو SHUFFLE_HASH التلميح، يختار Databricks SQL جانب البناء استنادا إلى نوع الصلة وأحجام العلاقات. نظرا لأن استراتيجية معينة قد لا تدعم جميع أنواع الصلة، فإن Databricks SQL غير مضمون لاستخدام استراتيجية الانضمام المقترحة من قبل التلميح.

بناء الجملة

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

BROADCASTJOIN ويتم اعتماد و MAPJOIN كتسميات مستعارة ل BROADCAST.

SHUFFLE_MERGE ويتم اعتماد و MERGEJOIN كتسميات مستعارة ل MERGE.

الانضمام إلى أنواع التلميح

  • BROADCAST ( table_name )

    استخدم ربط البث. يتم بث جانب الصلة مع التلميح بغض النظر عن autoBroadcastJoinThreshold. إذا كان كلا جانبي الصلة يحتويان على تلميحات البث، يتم بث الجانب ذي الحجم الأصغر (استنادا إلى الإحصائيات).

  • MERGE ( table_name )

    استخدم ربط دمج الفرز العشوائي.

  • SHUFFLE_HASH ( table_name )

    استخدم ربط تجزئة التبديل العشوائي. إذا كان لدى كلا الجانبين تلميحات تجزئة التبديل، فإن Databricks SQL يختار الجانب الأصغر (استنادا إلى الإحصائيات) كجانب البناء.

  • SHUFFLE_REPLICATE_NL ( table_name )

    استخدم ربط التكرار الحلقي المتداخل العشوائي والنسخ المتماثل.

  • table_name

    الاسم المكشوف لجدول أو اسم مستعار للجدول الذي ينطبق عليه التلميح.

الأمثلة

-- 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;

تلميحات انحراف

(Delta Lake) راجع تحسين الانضمام إلى انحراف باستخدام تلميحات الانحراف للحصول على SKEW معلومات حول التلميح.