Megosztás a következőn keresztül:


Illesztés optimalizálása ferde tippek használatával

Fontos

Ez a dokumentáció ki lett állítva, és lehet, hogy nem frissül. A tartalomban említett termékek, szolgáltatások vagy technológiák már nem támogatottak.

Nincs szükség ferde illesztésre vonatkozó tippekre. A Databricks alapértelmezés szerint adaptív lekérdezés-végrehajtással (AQE) kezeli a ferdeségeket. Lásd: Adaptív lekérdezések végrehajtása.

Feljegyzés

spark.sql.adaptive.skewJoin.enabled Az Azure Databricks alapértelmezett beállításának kell lennie True.

Mi az az adateltérés?

Az adateltérés olyan feltétel, amelyben a tábla adatai egyenlőtlenül oszlanak el a fürt partíciói között. Az adateltérés jelentősen csökkentheti a lekérdezések teljesítményét, különösen az illesztésekkel rendelkezőket. A nagy táblák közötti illesztésekhez el kell keverni az adatokat, és a ferdeség a fürtben végzett munka rendkívül kiegyensúlyozatlanságához vezethet. Valószínű, hogy az adateltérés hatással van egy lekérdezésre, ha úgy tűnik, hogy egy lekérdezés nagyon kevés feladatot végez (például az utolsó 3 tevékenység a 200-ból). Annak ellenőrzése, hogy az adateltérés hatással van-e egy lekérdezésre:

  1. Kattintson a elakadt szakaszra, és ellenőrizze, hogy csatlakozik-e.
  2. A lekérdezés befejezése után keresse meg az illesztési szakaszt, és ellenőrizze a tevékenység időtartamának eloszlását.
  3. Rendezze a tevékenységeket az időtartam csökkentésével, és ellenőrizze az első néhány tevékenységet. Ha az egyik tevékenység végrehajtása sokkal tovább tartott, mint a többi tevékenység, akkor eltérés van.

A ferdeség enyhítéséhez a Delta Lake az Azure Databricks SQL-ben eltúlzási tippeket fogad a lekérdezésekben. A Databricks Runtime egy ferde tippből származó információk alapján jobb lekérdezési tervet hozhat létre, amely nem szenved adateltéréstől.

Ferdeség-tipp konfigurálása relációs névvel

A ferdeség-tippnek tartalmaznia kell legalább a ferde reláció nevét. A reláció egy tábla, nézet vagy alquery. Az ezzel a kapcsolattal rendelkező összes illesztés ezután ferde illesztésoptimalizálást használ.

-- table with skew
SELECT /*+ SKEW('orders') */
  *
  FROM orders, customers
  WHERE c_custId = o_custId

-- subquery with skew
SELECT /*+ SKEW('C1') */
  *
  FROM (SELECT * FROM customers WHERE c_custId < 100) C1, orders
  WHERE C1.c_custId = o_custId

Ferdeség-tipp konfigurálása relációs névvel és oszlopnevekkel

Előfordulhat, hogy több illesztés is van egy relációban, és csak néhányuk szenved a ferdeségtől. A ferde illesztés optimalizálása némi többletterheléssel jár, ezért jobb, ha csak szükség esetén használja. Erre a célra a ferde tipp elfogadja az oszlopneveket. Csak az ezekkel az oszlopokkal rendelkező illesztések használják az illesztés optimalizálását.

-- single column
SELECT /*+ SKEW('orders', 'o_custId') */
  *
  FROM orders, customers
  WHERE o_custId = c_custId

-- multiple columns
SELECT /*+ SKEW('orders', ('o_custId', 'o_storeRegionId')) */
  *
  FROM orders, customers
  WHERE o_custId = c_custId AND o_storeRegionId = c_regionId

Ferdeség-tipp konfigurálása relációs névvel, oszlopnevekkel és ferde értékekkel

A tippben ferde értékeket is megadhat. A lekérdezéstől és az adatoktól függően a ferde értékek ismertek lehetnek (például azért, mert soha nem változnak), vagy könnyen kideríthetők. Ez csökkenti az illesztés optimalizálásának többletterhelését. Ellenkező esetben a Delta Lake automatikusan észleli őket.

-- single column, single skew value
SELECT /*+ SKEW('orders', 'o_custId', 0) */
  *
  FROM orders, customers
  WHERE o_custId = c_custId

-- single column, multiple skew values
SELECT /*+ SKEW('orders', 'o_custId', (0, 1, 2)) */
  *
  FROM orders, customers
  WHERE o_custId = c_custId

-- multiple columns, multiple skew values
SELECT /*+ SKEW('orders', ('o_custId', 'o_storeRegionId'), ((0, 1001), (1, 1002))) */
  *
  FROM orders, customers
  WHERE o_custId = c_custId AND o_storeRegionId = c_regionId