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, REPARTITIONve REPARTITION_BY_RANGE ipuçları desteklenir ve sırasıyla , coalesceve repartition Veri Kümesi API'lerine repartitionByRangeeş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 [, ...] ) ]İpucu
REBALANCE, sorgu sonucu çıkış bölümlerini yeniden dengelemek için kullanılabilir, böylece her bölüm makul boyutta olur (ç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ümlenmek veya yeniden dengelemek için bir sütunun veya takma adın görünür adı.
part_numTam 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 over MERGE over SHUFFLE_HASHSHUFFLE_REPLICATE_NL.
Her iki taraf BROADCAST ipucuyla ya da SHUFFLE_HASH ipucuyla belirtildiğinde, Databricks SQL birleştirme türüne ve ilişkilerin boyutlarına göre hangi tarafın derleneceğini 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 BROADCASTdesteklenir.
SHUFFLE_MERGE ve MERGEJOIN için diğer ad olarak MERGEdesteklenir.
Birleştirme ipucu türleri
BROADCAST ( table_name )Yayın katılımını kullanın. İpucu içeren birleştirme tarafı,
autoBroadcastJoinThresholdne olursa olsun 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 )İşlemleri gerçekleştirmek için "shuffle sort merge join" kullanın.
SHUFFLE_HASH ( table_name )Karma birleştirmeyi karıştırma özelliğini 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ır ve çoğalt 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) İpucu hakkında bilgi için Eğik ipuçlarını kullanarak eğik birleştirme optimizasyonu bölümüne bakın.