Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: Databricks SQL
Databricks Runtime
Yürütme planı oluşturmak için belirli yaklaşımlar önerin.
Sözdizimi
/*+ { partition_hint | join_hint | skew_hint } [, ...] */
Bölümleme ipuçları
Bölümleme ipuçları, Azure Databricks'in izlemesi gereken bir bölümleme stratejisi önermenizi sağlar.
COALESCE
, REPARTITION
ve REPARTITION_BY_RANGE
ipuçları desteklenir ve sırasıyla , coalesce
ve repartition
Veri Kümesi API'lerine repartitionByRange
eşdeğerdir.
Bu ipuçları size performansı ayarlamanın ve çıkış dosyalarının sayısını denetlemenin bir yolunu sağlar.
Birden çok bölümleme ipucu belirtildiğinde, mantıksal plana birden çok düğüm eklenir, ancak en soldaki ipucu iyileştirici tarafından seçilir.
Sözdizimi
partition_hint
COALESCE ( part_num ) |
REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } ) |
REPARTITION_BY_RANGE ( part_num [, column_name [, ...] ] | column_name [, ...] ) |
REBALANCE [ ( column_name [, ...] ) ]
Bölümleme ipucu türleri
COALESCE ( part_num )
Bölüm sayısını belirtilen bölüm sayısına düşürün. Parametre olarak bir bölüm numarası alır.
REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } )
Belirtilen bölümleme ifadelerini kullanarak belirtilen bölüm sayısına yeniden bölümleme. Bir bölüm numarası, sütun adları veya her ikisini de parametre olarak alır.
REPARTITION_BY_RANGE ( part_num [, column_name [, ...] ] | column_name [, ...] )
Belirtilen bölümleme ifadelerini kullanarak belirtilen bölüm sayısına yeniden bölümleme. Sütun adlarını ve isteğe bağlı bir bölüm numarasını parametre olarak alır.
REBALANCE [ ( column_name [, ...] ) ]
REBALANCE
ipucu, sorgu sonucu çıkış bölümlerini yeniden dengelemek için kullanılabilir, böylece her bölüm makul boyuttadır (çok küçük değil ve çok büyük değildir). Sütun adlarını parametre olarak alabilir ve sorgu sonucunu bu sütunlara göre bölümlendirmek için en iyi şekilde deneyebilir. Bu en iyi çabadır: Dengesizlik varsa Spark, bu bölümlerin çok büyük olmaması için çarpık bölümleri böler. Bu ipucu, çok küçük/büyük dosyalardan kaçınmak için bu sorgunun sonucunu bir tabloya yazmanız gerektiğinde kullanışlıdır. AQE etkin değilse bu ipucu yoksayılır.-
Yeniden bölümlendirmek veya yeniden dengelemek için bir sütunun veya takma adın görünen adı.
part_num
Tam sayı değişmez değeri. Yeniden bölümlendirecek bölüm sayısı.
Örnekler
> 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>
Katılım ipuçları
Birleştirme ipuçları, Databricks SQL'in kullanması gereken birleştirme stratejisini önermenizi sağlar.
Birleştirmenin her iki tarafında farklı birleştirme stratejisi ipuçları belirtildiğinde, Databricks SQL ipuçlarını şu sırayla önceliklendirir: BROADCAST
öncesinde MERGE
öncesinde SHUFFLE_HASH
öncesinde SHUFFLE_REPLICATE_NL
.
her iki taraf da BROADCAST
ipucu veya SHUFFLE_HASH
ipucuyla belirtildiğinde Databricks SQL, birleştirme türüne ve ilişkilerin boyutlarına göre derleme tarafını seçer.
Belirli bir strateji tüm birleştirme türlerini desteklemeyebileceği için Databricks SQL'in ipucu tarafından önerilen birleştirme stratejisini kullanması garanti değildir.
Sözdizimi
join_hint
BROADCAST ( table_name ) |
MERGE ( table_name ) |
SHUFFLE_HASH ( table_name ) |
SHUFFLE_REPLICATE_NL ( table_name )
BROADCASTJOIN
ve MAPJOIN
için diğer ad olarak BROADCAST
desteklenir.
SHUFFLE_MERGE
ve MERGEJOIN
için diğer ad olarak MERGE
desteklenir.
İpucu türlerini birleştirme
BROADCAST ( table_name )
Yayın katılımını kullanın. İpucu bulunan birleştirme tarafı,
autoBroadcastJoinThreshold
'nin durumu gözetilmeksizin yayınlanır. Birleştirmenin her iki tarafı da yayın ipuçlarına sahipse, boyutu daha küçük olan (istatistiklere göre) yayınlanır.MERGE ( table_name )
Karıştır-sıralama-birleştirme-bağlamayı kullanın.
SHUFFLE_HASH ( table_name )
Karışık hash birleştirmeyi kullanın. Her iki tarafta da karışık karma ipuçları varsa Databricks SQL, derleme tarafı olarak daha küçük olan tarafı (istatistiklere göre) seçer.
SHUFFLE_REPLICATE_NL ( table_name )
Karıştırma ve çoğaltma iç içe döngü birleştirmesini kullanın.
-
İpucunun uygulandığı tablonun veya tablo diğer adının kullanıma sunulan adı.
Örnekler
-- 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;
Eğme ipuçları
(Delta Lake) ipucu hakkında bilgi için bkz. SKEW
.