Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gunakan Structured Streaming untuk menulis ke Lakebase atau database PostgreSQL eksternal dengan pemrosesan batch bawaan, percobaan ulang otomatis, dan autentikasi yang dikelola oleh workspace.
Kapan menggunakan sink Lakebase
Gunakan sink Lakebase untuk penulisan streaming dengan latensi rendah ke Lakebase atau database PostgreSQL eksternal. Sink ini tidak mengharuskan Anda menerapkan fungsi kustom foreach untuk menangani batching, manajemen koneksi, dan penanganan kesalahan.
Kasus penggunaan umum meliputi:
- Perbarui database aplikasi secara real time untuk dasbor operasional atau fitur yang menghadap pelanggan.
- Sinkronkan data yang terus berubah, seperti hasil streaming yang diagregasi atau difilter, ke dalam basis data transaksional.
- Tulis output kueri Streaming Terstruktur ke dalam tabel Lakebase dengan latensi sub-detik menggunakan mode real time.
Untuk menyinkronkan data dari tabel Lakebase ke Delta Lake di Lakehouse, arah sebaliknya, lihat Umpan Data Perubahan Lakebase.
Persyaratan
-
Databricks Runtime 18 LTS ke atas.
- Koneksi PostgreSQL eksternal mengharuskan Anda menggunakan Databricks Runtime 19 atau yang lebih baru dan ikut serta dalam pratinjau Custom JDBC pada UC Compute.
- Tipe data interval mengharuskan Anda menggunakan Databricks Runtime 19 ke atas.
- Komputasi klasik dengan mode akses khusus atau standar, atau komputasi serverless untuk notebook atau pekerjaan. Pada komputasi serverless, gunakan
Trigger.AvailableNow(). Lihat Streaming pada komputasi tanpa server. - Database Lakebase, atau koneksi Unity Catalog ke database PostgreSQL eksternal.
Persyaratan pengidentifikasi
Untuk semua target, Databricks merekomendasikan penggunaan nama skema, tabel, kolom, dan kolom kunci utama yang diawali dengan huruf atau underscore serta hanya terdiri dari huruf, angka, dan underscore. Sink menerapkan persyaratan ini saat membuat tabel Lakebase secara otomatis. Untuk menggunakan pengenal yang tidak memenuhi persyaratan ini, buat tabel target sebelum memulai kueri.
Sambungkan ke database
Sink Lakebase mendukung metode koneksi berikut:
Tabel Lakebase terdaftar di Unity Catalog
Untuk tabel Lakebase yang terdaftar di Unity Catalog, konektor secara otomatis mengelola kredensial dan menggunakan identitas pengguna atau perwakilan layanan yang menjalankan kueri. Jika tabel tidak ada, konektor akan membuat tabel.
Untuk mendaftarkan database Lakebase dengan Unity Catalog, lihat Mendaftarkan database Lakebase di Unity Catalog.
Untuk menulis ke tabel Lakebase, gunakan metode .toTable() dengan nama tabel yang sepenuhnya memenuhi syarat, catalog.schema.table:
Python
(df.writeStream
.outputMode("update")
.option("upsertkey", "<primary-key-columns>") # Optional
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.toTable("<catalog>.<schema>.<table>")
)
Scala
df.writeStream
.outputMode("update")
.option("upsertkey", "<primary-key-columns>") // Optional
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.toTable("<catalog>.<schema>.<table>")
Ganti placeholder berikut:
-
<catalog>.<schema>.<table>: Nama lengkap yang memenuhi syarat dari tabel target.catalogadalah katalog Unity Catalog yang Anda buat saat mendaftarkan database Lakebase, lihat Mendaftarkan database Lakebase di Katalog Unity. Jika tabel tidak ada, konektor akan membuatnya. -
<primary-key-columns>: Opsional. Daftar yang dipisahkan oleh koma dari semua kolom dalam kunci utama tabel target, misalnyaidatauuser_id,event_type. Lihat perilaku Upsert. -
/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>: Jalur volume Unity Catalog tempat kueri menyimpan checkpoint-nya. Anda juga dapat menggunakan URI penyimpanan objek cloud. Lokasi harus berupa penyimpanan yang dapat Anda tulis, bukan disk lokal, dan harus unik untuk setiap kueri streaming. Ini tidak bergantung pada tabel target. Lihat checkpoint Streaming Terstruktur.
Untuk konfigurasi opsional, seperti batchsize dan batchinterval, lihat opsi sink PostgreSQL.
Tabel Lakebase tidak terdaftar di Unity Catalog
Untuk tabel Lakebase yang tidak terdaftar di Unity Catalog, konektor secara otomatis mengelola kredensial dan menggunakan identitas pengguna atau perwakilan layanan yang menjalankan kueri. Jika tabel tidak ada, konektor akan membuat tabel.
Untuk menulis ke tabel Lakebase, gunakan opsi endpoint dan dbtable:
Python
(df.writeStream
.format("postgresql")
.outputMode("update")
.option("endpoint", "<project-id>.<branch-id>.<endpoint-id>")
.option("database", "<database>") # Optional. Defaults to databricks_postgres.
.option("dbtable", "<schema>.<table>")
.option("upsertkey", "<primary-key-columns>") # Optional
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.start()
)
Scala
df.writeStream
.format("postgresql")
.outputMode("update")
.option("endpoint", "<project-id>.<branch-id>.<endpoint-id>")
.option("database", "<database>") // Optional. Defaults to databricks_postgres.
.option("dbtable", "<schema>.<table>")
.option("upsertkey", "<primary-key-columns>") // Optional
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.start()
Ganti placeholder berikut:
-
<project-id>.<branch-id>.<endpoint-id>: Titik akhir Lakebase Anda. Temukan ketiga nilai dalam Nama sumber daya pada menu Dapatkan ID dari tab Komputasi , yang memiliki formatprojects/<project-id>/branches/<branch-id>/endpoints/<endpoint-id>. Lihat Pengidentifikasi komputasi. -
<database>: Opsional. Nama database PostgreSQL target. Secara default menjadidatabricks_postgres. Lihat Mengelola database. -
<schema>.<table>: Tabel target dalam formatschema.table. Jika Anda menghilangkan skema, sink menggunakan skemapublic. Untuk pembuatan tabel otomatis, gunakan pengenal yang dimulai dengan huruf atau garis bawah dan hanya berisi huruf, angka, dan garis bawah. -
<primary-key-columns>: Opsional. Daftar yang dipisahkan oleh koma dari semua kolom dalam kunci utama tabel target, misalnyaidatauuser_id,event_type. Lihat perilaku Upsert. -
/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>: Jalur volume Unity Catalog tempat kueri menyimpan checkpoint-nya. Anda juga dapat menggunakan URI penyimpanan objek cloud. Lokasi harus berupa penyimpanan yang dapat Anda tulis, bukan disk lokal, dan harus unik untuk setiap kueri streaming. Ini tidak bergantung pada tabel target. Lihat checkpoint Streaming Terstruktur.
Untuk konfigurasi opsional, seperti batchsize dan batchinterval, lihat opsi sink PostgreSQL.
PostgreSQL eksternal dengan kredensial Unity Catalog
Penting
Fitur ini ada di Pratinjau Umum. Admin ruang kerja dapat mengontrol akses ke Custom JDBC pada UC Compute dari halaman Pratinjau. Lihat Kelola Pratinjau Azure Databricks.
Gunakan koneksi Unity Catalog untuk mengautentikasi ke database PostgreSQL eksternal tanpa menyimpan kredensial di kode Anda. Tabel target harus sudah ada.
Buat koneksi bertipe POSTGRESQL, lihat Buat koneksi. Pengguna atau perwakilan layanan yang menjalankan kueri harus memiliki USE CONNECTION pada koneksi tersebut.
Untuk menulis ke tabel PostgreSQL, gunakan opsi databricks.connection, database, dan dbtable:
Python
(df.writeStream
.format("postgresql")
.outputMode("update")
.option("databricks.connection", "<connection-name>")
.option("database", "<database>")
.option("dbtable", "<schema>.<table>")
.option("upsertkey", "<primary-key-columns>") # Optional
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.start()
)
Scala
df.writeStream
.format("postgresql")
.outputMode("update")
.option("databricks.connection", "<connection-name>")
.option("database", "<database>")
.option("dbtable", "<schema>.<table>")
.option("upsertkey", "<primary-key-columns>") // Optional
.option("checkpointLocation", "/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>")
.start()
Ganti placeholder berikut:
-
<connection-name>: Nama koneksi Unity Catalog. -
<database>: Nama dari database PostgreSQL tujuan. -
<schema>.<table>: Tabel target yang sudah ada dalamschema.tableformat. Jika Anda menghilangkan skema, sink menggunakan skemapublic. -
<primary-key-columns>: Opsional. Daftar yang dipisahkan oleh koma dari semua kolom dalam kunci utama tabel target, misalnyaidatauuser_id,event_type. Lihat perilaku Upsert. -
/Volumes/<catalog>/<schema>/<volume>/<checkpoint-name>: Jalur volume Unity Catalog tempat kueri menyimpan checkpoint-nya. Anda juga dapat menggunakan URI penyimpanan objek cloud. Lokasi harus berupa penyimpanan yang dapat Anda tulis, bukan disk lokal, dan harus unik untuk setiap kueri streaming. Ini tidak bergantung pada tabel target. Lihat checkpoint Streaming Terstruktur.
Koneksi PostgreSQL selalu menggunakan TLS. Verifikasi sertifikat mengikuti pengaturan pada koneksi Unity Catalog, yang Anda pilih saat membuat koneksi:
-
Sertifikat Trust server: Saat dipilih, koneksi menggunakan
sslmode=require, yang mengenkripsi koneksi tanpa memverifikasi sertifikat server. -
Sertifikat server yang disediakan pengguna: Berikan sertifikat server yang dikodekan PEM untuk digunakan
sslmode=verify-fullsaat sertifikat Trust server tidak dipilih. Jika Anda tidak menyediakan sertifikat, koneksi menggunakansslmode=verify-fulldengan trust store bawaan JVM.
Opsi konfigurasi
Sink menghasilkan error jika ada opsi yang tidak dikenali, JDBC_STREAMING_SINK_INVALID_OPTIONS.
Untuk opsi konfigurasi sink, termasuk opsi umum dan opsi untuk setiap metode koneksi, lihat opsi sink PostgreSQL.
Pemetaan jenis data
Sink memeriksa apakah setiap kolom DataFrame kompatibel dengan kolom target padanannya sebelum menulis data ke tabel Lakebase atau PostgreSQL eksternal yang sudah ada.
Tabel berikut berisi tipe yang didukung di Databricks Runtime 18 LTS dan ke atas:
| Tipe Spark | Tipe tabel Lakebase yang dibuat secara otomatis | Tipe kompatibel dalam tabel PostgreSQL yang sudah ada |
|---|---|---|
ByteType, ShortType |
smallint |
smallint |
IntegerType |
integer |
integer |
LongType |
bigint |
bigint |
FloatType |
real |
real |
DoubleType |
double precision |
double precision |
DecimalType |
numeric |
numeric |
StringType |
text |
varchar, text |
VarcharType(n) |
varchar(n) |
varchar, text |
CharType(n) |
char(n) |
char |
BinaryType |
bytea |
bytea |
BooleanType |
boolean |
boolean |
TimestampType |
timestamptz |
timestamptz |
TimestampNTZType |
timestamp |
timestamp |
DateType |
date |
date |
ArrayType, MapType, StructType, VariantType, NullType |
jsonb |
json, jsonb |
Tabel berikut berisi tipe yang didukung di Databricks Runtime 19 dan ke atas:
| Tipe Spark | Tipe tabel Lakebase yang dibuat secara otomatis | Tipe kompatibel dalam tabel PostgreSQL yang sudah ada |
|---|---|---|
DayTimeIntervalType, YearMonthIntervalType |
interval |
interval |
Perilaku Upsert
Opsi ini upsertkey mengidentifikasi kolom kunci utama tabel target. Untuk tabel yang sudah ada, kolom-kolom dalam upsertkey harus persis sesuai dengan kunci utama tabel tersebut. Jika Anda menghilangkan opsi tersebut, sink akan membaca kunci utama dari tabel. Untuk tabel Lakebase yang dibuat oleh sink, upsertkey mendefinisikan kunci utama. Jika Anda menghilangkan opsi tersebut, sink akan membuat tabel tanpa kunci primer.
Ketika tabel target memiliki kunci utama, sink melakukan upsert dengan sintaks INSERT INTO ... ON CONFLICT (<primary_key_columns>) DO UPDATE SET ... PostgreSQL. Ketika tabel target tidak memiliki kunci utama, sink melakukan penyisipan. Mode keluaran kueri tidak memengaruhi perilaku ini.
Semua kolom primary key harus ada di DataFrame dan menggunakan tipe yang sebanding, seperti tipe numerik atau string.
Pengoptimalan kinerja
Batching dan backpressure
Flush dipicu ketika salah satu kondisi terpenuhi:
- Buffer mencapai
batchsizebaris, yang nilai defaultnya adalah1000. - Umur buffer melebihi
batchinterval, yang nilai defaultnya adalah100 milliseconds.
Ketika basis data tidak dapat mengimbangi laju data yang masuk, sink meneruskan backpressure ke hulu menuju sumber.
Panduan latensi dan throughput:
- Untuk beban kerja latensi rendah dengan mode real time, kurangi
batchintervaluntuk menjamin waktu maksimum yang lebih singkat sebelum pembilasan. Lihat konsep mode waktu nyata untuk konsep dan contoh mode waktu nyata untuk contoh kode. - Untuk beban kerja dengan throughput tinggi, tingkatkan
batchsizeguna mengurangi overhead pada setiap transaksi.
Perilaku koneksi
Sink menggunakan pengumpulan koneksi pada pelaksana. Secara default, setiap tugas menggunakan satu koneksi database.
Databricks merekomendasikan agar Anda menggunakan nilai default 1 task untuk setiap koneksi. Jika Anda meningkatkan jumlah tugas untuk setiap koneksi, Anda dapat menyebabkan ketidakcocokan koneksi dan meningkatkan latensi untuk koneksi throughput tinggi.
Untuk mengonfigurasi rasio tugas terhadap koneksi, atur konfigurasi Spark spark.databricks.sql.streaming.jdbc.tasksPerConnection. Jika database target memiliki batas koneksi rendah, kurangi jumlah partisi acak atau tingkatkan spark.databricks.sql.streaming.jdbc.tasksPerConnection.
Sink secara otomatis mencoba kembali kesalahan JDBC sementara, termasuk kegagalan koneksi, kebuntuan, dan pembatasan laju. Jika sink menghabiskan semua upaya percobaan ulang, kueri akan gagal.
Pemicu dan mode output yang didukung
Triggers
Tabel ini menunjukkan dukungan untuk tipe pemicu Structured Streaming pada komputasi klasik dan serverless:
| Pemicu | Komputasi tradisional | Komputasi tanpa server (notebook dan pekerjaan) |
|---|---|---|
RealTime |
Yes | No |
ProcessingTime |
Yes | No |
AvailableNow |
Yes | Yes |
Once |
Yes. Deprecated. Gunakan AvailableNow. |
Yes. Deprecated. Gunakan AvailableNow. |
Mode keluaran
Tabel ini memperlihatkan dukungan untuk mode output Streaming Terstruktur:
| Mode keluaran | Dukungan |
|---|---|
update |
Yes |
append |
Yes. Perilaku identik dengan update. Kueri melakukan upsert saat tabel target memiliki kunci primer; jika tidak, kueri melakukan penyisipan. Lihat perilaku Upsert. |
complete |
No |
Batasan
- Untuk database PostgreSQL eksternal yang terhubung melalui koneksi Unity Catalog, tabel target harus sudah ada. Sink secara otomatis membuat tabel yang belum ada hanya di Lakebase.
- Pipeline Lakeflow tidak didukung.