Bagikan melalui


Bekerja dengan gabungan di Azure Databricks

Databricks mendukung sintaks gabungan standar ANSI. Artikel ini menjelaskan perbedaan antara penggabungan data dalam pemrosesan batch dan streaming.

Catatan

Databricks juga mendukung sintaks standar untuk operator yang ditetapkan UNION, INTERSECT, dan EXCEPT. Lihat operator himpunan.

Perbedaan antara penggabungan streaming dan batch

Gabungan di Azure Databricks bersifat berstatus atau tanpa status.

Semua penggabungan batch adalah penggabungan tanpa status. Hasil diproses segera dan mencerminkan data pada saat kueri dijalankan. Setiap kali kueri dijalankan, hasil baru dihitung berdasarkan data sumber yang ditentukan. Lihat Penggabungan batch.

Gabungan antara dua sumber data streaming bersifat stateful (memiliki status yang dipertahankan). Dalam gabungan stateful, Azure Databricks melacak informasi tentang sumber data dan hasilnya, serta memperbarui hasilnya secara iteratif. Gabungan stateful dapat memberikan solusi yang kuat untuk pemrosesan data online, tetapi bisa sulit diterapkan secara efektif. Mereka memiliki semantik operasional yang kompleks tergantung pada mode keluaran, interval pemicu, dan penanda waktu. Lihat Penggabungan Stream-Stream.

Gabungan aliran-statis bersifat stateless, tetapi memberikan opsi yang baik untuk menggabungkan sumber data inkremental (seperti tabel fakta) dengan sumber data statis (seperti tabel dimensi yang berubah perlahan). Daripada menggabungkan semua rekaman dari kedua sisi setiap kali kueri dijalankan, hanya rekaman yang baru diterima dari sumber streaming yang digabungkan dengan versi tabel statis saat ini. Lihat Gabungan aliran-statis.

Gabungan batch

Azure Databricks mendukung sintaks join SQL standar, termasuk inner join, outer join, semi join, anti join, dan cross join. Lihat JOIN.

Catatan

Databricks merekomendasikan penggunaan tampilan materialisasi untuk mengoptimalkan komputasi inkremental dari hasil inner join. Lihat Tampilan materialisasi.

Gabungan stream-stream

Menggabungkan dua sumber data streaming dapat menghadirkan tantangan signifikan dalam mengelola informasi status dan penalaran tentang komputasi dan output hasil. Sebelum menerapkan penggabungan antar aliran, Databricks merekomendasikan untuk mengembangkan pemahaman yang kuat tentang dasar operasional untuk streaming berbasis status, termasuk bagaimana penanda waktu memengaruhi manajemen status. Lihat artikel berikut:

Databricks merekomendasikan untuk menentukan marka air untuk kedua sisi semua gabungan aliran aliran. Jenis gabungan berikut ini didukung:

  • Gabungan dalam
  • Gabungan luar kiri
  • Penggabungan luar kanan
  • Gabungan luar penuh
  • Gabungan semi kiri

Lihat dokumentasi Structured Streaming Apache Spark tentang penggabungan stream-stream.

Gabungan statis aliran

Catatan

Perilaku yang dijelaskan untuk gabungan aliran statis mengasumsikan bahwa data statis disimpan menggunakan Delta Lake.

Gabungan aliran-statis menghubungkan versi terbaru tabel Delta yang valid (data statis) dengan aliran data menggunakan penggabungan tanpa status.

Saat Azure Databricks memproses batch mikro data dalam gabungan aliran-statis, versi data terbaru yang valid dari tabel Delta statis menggabungkan dengan catatan yang ada dalam batch mikro saat ini. Karena gabungan tanpa status, Anda tidak perlu mengonfigurasi watermarking dan dapat memproses hasil dengan latensi rendah. Data dalam tabel Delta statis yang digunakan dalam gabungan harus berubah secara perlahan.

Contoh berikut menunjukkan pola ini:

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

Menggabungkan petunjuk di Azure Databricks

Apache Spark mendukung penentuan petunjuk gabungan untuk gabungan rentang dan gabungan condong. Petunjuk untuk gabungan condong tidak diperlukan karena Azure Databricks secara otomatis mengoptimalkan gabungan ini. Lihat Petunjuk

Pedoman untuk gabungan rentang dapat berguna jika performa penggabungan buruk dan Anda melakukan penggabungan dengan ketidaksetaraan. Contohnya termasuk bergabung pada rentang tanda waktu atau rentang ID pengklusteran. Lihat Pengoptimalan gabungan rentang dan Optimalkan performa gabungan di Azure Databricks.