Sumber data Spark

Spark Data Source API memungkinkan Anda membaca dan menulis ke database eksternal langsung dari Azure Databricks. Gunakan hanya ketika Anda memerlukan fleksibilitas penuh mesin Spark, ingin menjalankan kueri asli pada sumbernya, atau memerlukan akses tulis ke sistem eksternal. Secara umum, Azure Databricks merekomendasikan akses baca-saja yang diatur dengan pushdown kueri Spark atau SQL otomatis. Lihat Apa itu federasi kueri?.

Spark Data Source API memiliki perilaku khusus untuk konektivitas, eksekusi kueri, dan deteksi skema.

  • Beban kerja utama dan transformasi Spark berikutnya berjalan pada kluster Azure Databricks Spark.
  • Saat menggunakan query opsi , pernyataan SQL yang ditentukan berjalan sepenuhnya pada sumber data eksternal. Spark mengambil hasil tanpa melakukan pushdown transformasi pada string kueri.
  • Koneksi memerlukan konektor yang dibundel Azure Databricks, driver JDBC yang disediakan pengguna, atau sumber data kustom PySpark.
  • Spark secara otomatis membaca skema dari tabel database eksternal dan memetakan jenisnya ke jenis Spark SQL.

Menggunakan konektor yang dibundel

Databricks Runtime mencakup konektor yang dioptimalkan untuk sumber data umum. Lihat Konektor yang dibundel yang didukung untuk daftar lengkapnya.

Konektor yang dibundel menggunakan host dan port sebagai opsi terpisah alih-alih string URL JDBC lengkap.

Membaca data menggunakan kueri pass-through

Menggunakan opsi query memastikan bahwa logika filter dan join dijalankan pada database sumber sebelum data mencapai Spark. Untuk akses baca terkelola dengan pushdown kueri otomatis dan delegasi izin Unity Catalog melalui tampilan, pertimbangkan kueri jarak jauh sebagai gantinya.

df = (spark.read
  .format("sqlserver")
  .option("host", "<your-sql-server-instance>.database.windows.net")
  .option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
  .option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
  .option("database", "<database-name>")
  .option("query", "SELECT id, name FROM users WHERE active = 1")
  .load())

Data tulis

Tentukan mode tulis dengan .mode() untuk mengontrol bagaimana data ditulis. Gunakan append untuk menambahkan baris ke tabel yang sudah ada atau overwrite untuk mengganti kontennya.

(df.write
  .format("sqlserver")
  .mode("overwrite")
  .option("host", "<your-sql-server-instance>.database.windows.net")
  .option("user", dbutils.secrets.get(scope="<scope>", key="<user>"))
  .option("password", dbutils.secrets.get(scope="<scope>", key="<password>"))
  .option("database", "<database-name>")
  .option("dbtable", "<table-name>")
  .save())

Menggunakan koneksi JDBC UC

Jika konektor khusus sumber tidak dibundel, atau jika Anda ingin menggunakan versi driver JDBC tertentu, gunakan koneksi JDBC Unity Catalog. Ini memungkinkan Anda mempusatkan manajemen kredensial dan membawa driver JDBC Anda sendiri.

Koneksi JDBC Unity Catalog menawarkan beberapa keuntungan daripada menggunakan konektor yang dibundel atau driver JDBC mentah secara langsung. Dengan koneksi JDBC Unity Catalog, Anda dapat:

  • Bawa JAR driver JDBC Anda sendiri untuk database apa pun yang mendukung JDBC.
  • Buat koneksi sekali dan gunakan kembali di seluruh kluster tanpa server, standar, dan khusus.
  • Menggunakan akses yang diatur ke sumber data menggunakan objek koneksi Katalog Unity.
  • Sembunyikan kredensial koneksi dari pengguna kueri.
  • Baca dari dan tulis ke database eksternal melalui Spark Data Source API.

Untuk menggunakan koneksi JDBC Unity Catalog, tentukan databricks.connection di opsi Spark Anda:

df = (spark.read
  .format("jdbc")
  .option("databricks.connection", "<connection-name>")
  .option("query", "SELECT * FROM external_table")
  .load())

Untuk instruksi penyiapan, lihat Koneksi JDBC.

Menggunakan konektor kustom pada kluster khusus

Pada kluster khusus (klasik), Anda dapat menginstal konektor sumber data Spark pihak ketiga atau driver JDBC yang tidak dibundel dengan Databricks Runtime.

Gunakan pendekatan ini ketika:

  • Anda memerlukan konektor Spark pihak ketiga untuk sistem seperti MongoDB, Cassandra, Couchbase, atau Elasticsearch.
  • Anda memerlukan versi driver tertentu yang tidak disertakan di runtime.
  • Anda ingin menginstal driver JDBC langsung di kluster tanpa menyiapkan koneksi Katalog Unity.

Instal konektor atau driver

Instal pustaka di kluster Anda melalui Komputasi>kluster Anda>Pustaka>Instal baru. Anda dapat menggunakan koordinat Maven secara langsung tanpa mengunduh atau mengunggah JAR apa pun. Mulai ulang kluster agar pustaka berlaku.

Membaca data

Setelah konektor diinstal, gunakan nama format konektor dan opsi koneksi yang diperlukan untuk membaca data.

df = (spark.read
  .format("mongodb")
  .option("connection.uri", "mongodb://<hostname>:27017")
  .option("database", "<database-name>")
  .option("collection", "<collection-name>")
  .load())

Data tulis

Gunakan nama format dan opsi koneksi yang sama untuk menulis data kembali ke sumbernya.

(df.write
  .format("mongodb")
  .mode("overwrite")
  .option("connection.uri", "mongodb://<hostname>:27017")
  .option("database", "<database-name>")
  .option("collection", "<collection-name>")
  .save())

Considerations

Ingatlah hal berikut saat menggunakan konektor kustom pada kluster khusus.

  • Driver atau konektor hanya tersedia pada kluster tempat driver atau konektor diinstal.
  • JAR Spark kustom pihak ketiga tidak didukung di Databricks SQL, serverless, atau kluster mode akses standar. Untuk jenis komputasi tersebut, gunakan konektor yang dibundel atau koneksi JDBC Unity Catalog.

Sumber data kustom PySpark

API DataSource Python memungkinkan Anda membangun konektor data kustom sepenuhnya dalam Python, tanpa JAR atau pustaka berbasis JVM. Gunakan ini saat Anda perlu terhubung ke REST API, aplikasi SaaS, atau sistem apa pun tanpa antarmuka JDBC, atau ketika Anda ingin membuat data sintetis secara terprogram. API mendukung baik pembacaan maupun penulisan secara batch dan streaming.

Catatan

Sumber data kustom PySpark memerlukan Databricks Runtime 15.4 LTS atau lebih tinggi.

Untuk penyiapan, contoh, dan referensi API, lihat Sumber data kustom PySpark.

Membandingkan strategi integrasi

Tabel berikut membandingkan Spark Data Source API dengan Lakehouse Federation dan Lakeflow Connect untuk membantu Anda memilih pendekatan yang tepat untuk kasus penggunaan Anda.

Fitur API Sumber Data Spark Federasi Lakehouse Lakeflow Connect
Kasus penggunaan utama ETL yang kompleks, logika Spark khusus, kueri pass-through Kueri ad-hoc, pelaporan BI Pemasukan data otomatis berskala besar
Pergerakan data Dimuat ke memori Spark (sementara) Dimuat ke memori Spark (sementara) Disalin ke Delta Lake (persisten)
Pelaksanaan kueri Tarik-turun manual dengan opsi bawaan query Pushdown otomatis untuk filter, join, dan agregasi Spark dan SQL Tidak berlaku (replikasi tabel penuh)
Governance Koneksi Katalog Unity (JDBC) atau cakupan rahasia Katalog Unity (katalog gabungan) Unity Catalog (pipeline terkelola)
Paling cocok untuk Pengguna mahir yang membutuhkan fleksibilitas penuh Spark Meminimalkan pergerakan data sambil mempertahankan tata kelola CDC produksi dan alur penyerapan

Konektor bawaan yang didukung

Sumber data berikut dibundel di Databricks Runtime dan dapat dipanggil langsung melalui Spark. Operasi baca dan tulis didukung di cluster khusus dan standar.

Catatan

Penulisan pada komputasi tanpa server didukung untuk PostgreSQL, SQL Server, MySQL, Snowflake, dan Redshift. Lihat Opsi penulisan tanpa server untuk konektor yang dibundel untuk opsi konektor yang didukung.

Sumber data spark.format() nama
PostgreSQL "postgresql"
SQL Server "sqlserver"
MySQL dan MariaDB "mysql"
Snowflake "snowflake"
Amazon Redshift "redshift"
Google BigQuery (platform untuk analisis data) "bigquery"
Azure Synapse "SQLDW"
HTTP "http"

Keterbatasan

Batasan berikut berlaku saat menggunakan Spark Data Source API di Azure Databricks.

  • Opsi Spark untuk sumber data yang dibundel terbatas pada query, dbtable, dan sekumpulan kecil opsi khusus konektor.
  • JAR Spark pihak ketiga kustom hanya dapat diinstal pada kluster khusus. Untuk kluster tanpa server atau standar, gunakan konektor yang dibundel atau koneksi JDBC Unity Catalog.
  • Sumber data kustom PySpark memerlukan Databricks Runtime 15.4 LTS atau lebih tinggi.