Práce s spojeními v Azure Databricks
Databricks podporuje standardní syntaxi join ANSI. Tento článek popisuje rozdíly mezi spojeními pomocí dávkového zpracování a zpracování datových proudů a poskytuje několik doporučení pro optimalizaci výkonu join.
Poznámka:
Databricks podporuje také standardní syntaxi operátorů setUNION
, INTERSECT
a EXCEPT
. Podívejte se na operátory Set.
Rozdíly mezi streamováním a dávkovými spojeními
Spojení v Azure Databricks jsou stavová nebo bezstavová.
Všechna dávková spojení jsou bezstavová spojení. Výsledky se okamžitě zpracovávají a odrážejí data v době spuštění dotazu. Při každém spuštění dotazu se na základě zadaných zdrojových dat vypočítají nové výsledky. Viz Připojení služby Batch.
Spojení mezi dvěma streamovanými zdroji dat jsou stavová. Ve stavových spojeních Azure Databricks sleduje informace o zdrojích dat a výsledcích a iterativně aktualizuje výsledky. Stavové spojení mohou poskytovat výkonná řešení pro online zpracování dat, ale může být obtížné efektivně implementovat. Mají složitou provozní sémantiku v závislosti na výstupním režimu, intervalu triggeru a watermark. Viz připojení streamu.
Statické spojení datových proudů jsou bezstavová, ale poskytují dobrou možnost připojení přírůstkového zdroje dat (například fakta table) se statickým zdrojem dat (například pomalu se měnící dimenzionální table). Místo spojení všech záznamů z obou stran při každém spuštění dotazu se ke stávající verzi statického tablepřipojí pouze nově přijaté záznamy ze zdroje streamování. Viz Stream-static joins.
Připojení služby Batch
Azure Databricks podporuje standardní syntaxi SQL join, včetně vnitřních, vnějších, polovičních, anti a křížových spojení. Viz JOIN.
Poznámka:
Databricks doporučuje použít materializované zobrazení k optimize přírůstkové výpočty výsledků vnitřního join. Viz Použití materializovaných views v Databricks SQL.
Spojení streamů
Spojení dvou streamovaných zdrojů dat může představovat významné problémy při správě informací o stavu a odůvodnění výpočtu a výstupu výsledků. Před implementací stream-stream joindoporučuje Databricks vyvinout silné znalosti provozní sémantiky pro stavové streamování, včetně toho, jak vodoznaky ovlivňují správu stavu. Podívejte se na následující články:
- Co je stavové streamování?
- Použití vodoznaků k řízení prahových hodnot zpracování dat
- Propojení streamů
Databricks doporučuje zadat vodoznaky pro obě strany všech spojení stream-steam. Podporují se následující typy join:
- Vnitřní spojení
- Levé vnější spojení
- Pravé vnější spojení
- Úplná vnější spojení
- Levá středník spojení
Viz dokumentace ke strukturovanému streamování Apache Sparku na spojeních stream-steam.
Statické spojení streamu
Poznámka:
Popsané chování pro připojení stream-static předpokládá, že statická data jsou uložena pomocí Delta Lake.
Stream-statická join spojuje nejnovější platnou verzi Delty table (statická data) s datovým streamem za použití bezstavového join.
Když Azure Databricks zpracuje mikrodávku dat ve statickém joindatového proudu, připojí se nejnovější platná verze dat ze statického delta table spojí se záznamy, které jsou přítomné v aktuální mikrodávce. Vzhledem k tomu, že join je bezstavový, nemusíte konfigurovat vodoznaky a zpracovávat výsledky s nízkou latencí. Data ve statickém rozdílovém table použitá v join by se měla pomalu měnit.
Následující příklad ukazuje tento vzor:
streamingDF = spark.readStream.table("orders")
staticDF = spark.read.table("customers")
query = (streamingDF
.join(staticDF, streamingDF.customer_id==staticDF.id, "inner")
.writeStream
.option("checkpointLocation", checkpoint_path)
.table("orders_with_customer_info")
)
výkon Optimizejoin
Výpočty s povoleným Photonem vždy vyberou nejlepší typ join. Podívejte se, co je Photon?
Použití aktuální verze Databricks Runtime s povolenou funkcí Photon obvykle poskytuje dobrý join výkon, ale měli byste zvážit také následující doporučení:
Křížové spojení jsou velmi drahé. Remove křížové spoje z úloh a dotazů, které vyžadují nízkou latenci nebo časté přepočítání.
Join pořadí je důležité. Při provádění více spojení vždy nejprve join nejmenší tables a poté join výsledek s většími tables.
Optimalizátor může mít potíže s dotazy s mnoha spojeními a agregacemi. Úspora zprostředkujících výsledků může urychlit plánování dotazů a výpočetní výsledky.
Udržujte nové statistiky pro zlepšení výkonu. Prediktivní optimalizace pomocí
ANALYZE
(Public Preview) může automaticky update a udržovat statistiky. Dotaz můžete také spustit na statistiky odANALYZE TABLE table_name COMPUTE STATISTICS
do update v Plánovači dotazů.
Důležité
Prediktivní optimalizace ve ANALYZE
verzi Public Preview. Zahrnuje inteligentní shromažďování statistik během zápisů. Pomocí tohoto formuláře se zaregistrujte do verze Public Preview.
Poznámka:
Ve službě Databricks Runtime 14.3 LTS a novějších můžete upravit columns, u kterého Delta Lake shromažďuje statistiky pro přeskočení dat, a pak znovu zkompilovat existující statistiky v protokolu Delta. Viz Určení statistiky delta columns.
Join tipy pro Azure Databricks
Apache Spark podporuje zadávání join nápověd pro spojení rozsahů a nesymetrická spojení. Rady pro nerovnoměrné spojení nejsou nezbytné, protože Azure Databricks tato spojení automaticky optimalizuje. Zobrazit nápovědy
Nápovědy pro spojení rozsahů mohou být užitečné, pokud je výkon join nízký a provádíte spoje s nerovností. Mezi příklady patří připojení k rozsahu časových razítek nebo rozsahu ID clusteringu. Viz optimalizaci join rozsahu .