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.
Penting
Lakebase Provisioned adalah penawaran Lakebase asli yang menggunakan komputasi yang disediakan yang Anda skalakan secara manual. Untuk wilayah yang didukung, lihat Ketersediaan wilayah. Untuk versi terbaru Lakebase, dengan komputasi penskalaan otomatis, skala-ke-nol, pencabangan, dan pemulihan instan, lihat Penskalaan Otomatis Lakebase.
Instans Lakebase baru akan dibuat sebagai proyek Autoscaling. Peluncuran dimulai 12 Maret 2026. Untuk informasi lebih lanjut, lihat Penskalaan otomatis yang diaktifkan secara default.
Tabel yang disinkronkan memungkinkan Anda menyajikan data danau melalui instans Postgres yang telah disediakan oleh Lakebase. Tabel Unity Catalog disinkronkan ke Postgres sehingga aplikasi dapat mengkueri data lakehouse secara langsung dengan latensi rendah. Proses ini umumnya dikenal sebagai reverse ETL. Lakehouse dioptimalkan untuk analitik dan pengayaan, sementara Lakebase dirancang untuk beban kerja operasional yang memerlukan kueri gaya pencarian yang cepat dan konsistensi transaksi.
Apa itu tabel yang disinkronkan?
Tabel yang disinkronkan memungkinkan Anda menyajikan data tingkat analitik dari Unity Catalog melalui Lakebase Provisioned Postgres, membuatnya tersedia untuk aplikasi yang membutuhkan kueri latensi rendah dan transaksi ACID penuh. Mereka menjembatani kesenjangan antara penyimpanan analitik dan sistem operasional dengan memastikan data Anda siap untuk digunakan dalam aplikasi real-time.
Alur sinkronisasi menggunakan Alur Deklaratif Lakeflow Spark terkelola untuk terus memperbarui tabel yang disinkronkan Katalog Unity dan tabel Postgres dengan perubahan dari tabel sumber. Setelah pembuatan, tabel yang disinkronkan dapat dikueri langsung menggunakan alat Postgres.
Karakteristik utama tabel yang disinkronkan adalah sebagai berikut:
- Tabel diperlakukan sebagai baca-saja di Postgres untuk mempertahankan integritas data dengan sumbernya
- Secara otomatis disinkronkan menggunakan Alur Deklaratif Lakeflow Spark terkelola
- Dapat dikueri melalui antarmuka PostgreSQL standar
- Dikelola melalui Unity Catalog untuk tata kelola dan manajemen siklus hidup
Peringatan
Meskipun dimungkinkan untuk memodifikasi tabel yang disinkronkan langsung di Postgres, Azure Databricks secara ketat merekomendasikan untuk menjalankan hanya kueri baca untuk melindungi integritas data dengan sumbernya. Untuk operasi yang didukung pada tabel yang disinkronkan, lihat Operasi yang didukung.
Sebelum Anda mulai
- Anda memiliki tabel Unity Catalog di katalog apa pun.
- Anda memiliki
CAN USEizin pada instans database.
Membuat tabel yang disinkronkan
Antarmuka Pengguna
Untuk menyinkronkan tabel Unity Catalog ke Postgres, lakukan hal berikut:
Klik Katalog di bilah sisi ruang kerja.
Temukan dan pilih tabel Katalog Unity tempat Anda ingin membuat tabel yang disinkronkan.
Klik Buat>tabel Yang Disinkronkan.
Pilih katalog, skema, dan masukkan nama tabel untuk tabel baru yang disinkronkan.
- Tabel yang disinkronkan juga dapat dibuat di katalog Standar, dengan beberapa konfigurasi tambahan. Pilih katalog Standar Anda, sebuah skema, dan masukkan nama tabel untuk tabel yang baru disinkronkan dan dibuat.
Pilih instans database dan masukkan nama database Postgres untuk membuat tabel yang disinkronkan. Bidang database Postgres secara default ke katalog target yang dipilih saat ini. Jika database Postgres tidak ada di bawah nama ini, Azure Databricks membuat database baru.
Pilih Kunci Primer. Kunci primer diperlukan karena memungkinkan akses efisien ke baris untuk dibaca, diperbarui, dan dihapus.
Penting
Kolom di kunci primer tidak dapat bernilai null dalam tabel yang disinkronkan. Oleh karena itu, baris dengan null di kolom kunci utama dikecualikan dari sinkronisasi.
Jika dua baris memiliki kunci utama yang sama dalam tabel sumber, pilih Kunci Timeseries untuk mengonfigurasi deduplikasi. Saat Kunci Timeseries ditentukan, tabel yang disinkronkan hanya berisi baris dengan nilai kunci timeseries terbaru untuk setiap kunci utama.
Pilih mode sinkronisasi dari Rekam Jepret, Dipicu, dan Berkelanjutan. Untuk informasi selengkapnya tentang setiap mode sinkronisasi, lihat Mode sinkronisasi yang dijelaskan.
Pilih apakah Anda ingin membuat tabel yang disinkronkan ini dari alur baru atau yang sudah ada.
- Jika membuat alur baru dan menggunakan katalog terkelola, pilih lokasi penyimpanan untuk tabel penahapan. Jika menggunakan katalog standar, tabel penahapan secara otomatis disimpan dalam katalog.
- Jika menggunakan alur yang ada, periksa apakah mode sinkronisasi baru cocok dengan mode alur.
(Opsional) Pilih kebijakan penggunaan Tanpa Server. Untuk membuat kebijakan penggunaan tanpa server, lihat Penggunaan atribut dengan kebijakan penggunaan tanpa server. Ini memungkinkan Anda untuk mengaitkan penggunaan penagihan ke kebijakan penggunaan tanpa server tertentu.
- Untuk tabel yang disinkronkan, entitas yang dapat ditagih adalah alur Alur Deklaratif Lakeflow Spark yang mendasar. Untuk mengubah kebijakan anggaran, ubah objek pipeline yang mendasar. Lihat Mengonfigurasi alur tanpa server.
Setelah Status tabel yang disinkronkan adalah Online, masuk ke instans database Anda dan kueri tabel yang baru dibuat. Kueri tabel Anda menggunakan editor SQL, alat eksternal, atau buku catatan.
Python SDK
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.database import SyncedDatabaseTable, SyncedTableSpec, NewPipelineSpec, SyncedTableSchedulingPolicy
# Initialize the Workspace client
w = WorkspaceClient()
# Create a synced table in a database catalog
synced_table = w.database.create_synced_database_table(
SyncedDatabaseTable(
name="database_catalog.schema.synced_table", # Full three-part name
spec=SyncedTableSpec(
source_table_full_name="source_catalog.source_schema.source_table",
primary_key_columns=["id"], # Primary key columns
scheduling_policy=SyncedTableSchedulingPolicy.TRIGGERED, # SNAPSHOT, TRIGGERED, or CONTINUOUS
# Optional: timeseries_key="timestamp" # For deduplication
new_pipeline_spec=NewPipelineSpec(
storage_catalog="storage_catalog",
storage_schema="storage_schema"
)
),
)
)
print(f"Created synced table: {synced_table.name}")
# Create a synced table in a standard UC catalog
synced_table = w.database.create_synced_database_table(
SyncedDatabaseTable(
name="standard_catalog.schema.synced_table", # Full three-part name
database_instance_name="my-database-instance", # Required for standard catalogs
logical_database_name="postgres_database", # Required for standard catalogs
spec=SyncedTableSpec(
source_table_full_name="source_catalog.source_schema.source_table",
primary_key_columns=["id"],
scheduling_policy=SyncedTableSchedulingPolicy.CONTINUOUS,
create_database_objects_if_missing=True, # Create database/schema if needed
new_pipeline_spec=NewPipelineSpec(
storage_catalog="storage_catalog",
storage_schema="storage_schema"
)
),
)
)
print(f"Created synced table: {synced_table.name}")
# Check the status of a synced table
synced_table_name = "database_catalog.schema.synced_table"
status = w.database.get_synced_database_table(name=synced_table_name)
print(f"Synced table status: {status.data_synchronization_status.detailed_state}")
print(f"Status message: {status.data_synchronization_status.message}")
antarmuka baris perintah (CLI)
# Create a synced table in a database catalog
databricks database create-synced-database-table \
--json '{
"spec": {
"name": "database_catalog.schema.synced_table",
"source_table_full_name": "source_catalog.source_schema.source_table",
"primary_key_columns": ["id"],
"scheduling_policy": "TRIGGERED"
},
"new_pipeline_spec": {
"storage_catalog": "storage_catalog",
"storage_schema": "storage_schema"
}
}'
# Create a synced table in a standard UC catalog
# new_pipeline_spec, storage_catalog, and storage_schema are optional
databricks database create-synced-database-table \
--database-instance-name "my-database-instance" \
--logical-database-name "databricks_postgres" \
--json '{
"name": "standard_catalog.schema.synced_table",
"spec": {
"source_table_full_name": "source_catalog.source_schema.source_table",
"primary_key_columns": ["id"],
"scheduling_policy": "CONTINUOUS",
"create_database_objects_if_missing": true
}
}'
# Check the status of a synced table
databricks database get-synced-database-table "database_catalog.schema.synced_table"
melengkung
Buat tabel yang disinkronkan dalam katalog database.
export CATALOG_NAME=<Database catalog>
export SRC_TBL="source_catalog.source_schema.source_table"
export DEST_TBL="$CATALOG_NAME.some_schema.synced_table"
export PKS='["id"]'
export ST_CATALOG="storage_catalog"
export ST_SCHEMA="storage_schema"
curl -X POST https://$WORKSPACE/api/2.0/database/synced_tables \
-H "Content-Type: text/json" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
--data-binary @- << EOF
{
"name": "$DEST_TBL",
"spec": {
"source_table_full_name": "$SRC_TBL",
"primary_key_columns": $PKS,
"scheduling_policy": "TRIGGERED",
},
"new_pipeline_spec": {
"storage_catalog": "$ST_CATALOG",
"storage_schema": "$ST_SCHEMA",
}
}
EOF
Buat tabel yang disinkronkan di katalog Unity Catalog standar.
export CATALOG_NAME=<Standard catalog>
export DATABASE_INSTANCE=<database instance>
export POSTGRES_DATABASE=$CATALOG_NAME
export SRC_TBL="source_catalog.source_schema.source_table"
export DEST_TBL="$CATALOG_NAME.some_schema.sync_table"
export PKS='["id"]'
export ST_CATALOG="storage_catalog"
export ST_SCHEMA="storage_schema"
curl -X POST https://$WORKSPACE/api/2.0/database/synced_tables \
-H "Content-Type: text/json" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
--data-binary @- << EOF
{
"name": "$DEST_TBL",
"database_instance_name": "$DATABASE_INSTANCE",
"logical_database_name": "$POSTGRES_DATABASE",
"spec": {
"source_table_full_name": "$SRC_TBL",
"primary_key_columns": $PKS,
"scheduling_policy": "TRIGGERED",
},
"new_pipeline_spec": {
"storage_catalog": "$ST_CATALOG",
"storage_schema": "$ST_SCHEMA",
}
}
EOF
Periksa status tabel yang disinkronkan.
export SYNCEDTABLE='pg_db.silver.sbtest1_online'
curl --request GET \
"https://e2-dogfood.staging.cloud.databricks.com/api/2.0/database/synced_tables/$SYNCEDTABLE" \
--header "Authorization: Bearer dapi..."
Mode sinkronisasi dijelaskan
Tabel yang disinkronkan dapat dibuat dengan salah satu mode sinkronisasi berikut, yang menentukan bagaimana data disinkronkan dari sumber ke tabel yang disinkronkan di Postgres:
| Mode sinkronisasi | Description | Kapan digunakan | Performance |
|---|---|---|---|
| Snapshot | Alur berjalan sekali untuk mengambil rekam jepret tabel sumber dan menyalinnya ke tabel yang disinkronkan. Eksekusi alur kerja berikutnya menyalin keseluruhan data sumber ke tujuan dan menggantinya secara atomis. Alur dapat dipicu secara manual, melalui API atau sesuai jadwal. | Sumber mengubah >10% baris per siklus, atau sumber tidak mendukung Umpan Ubah Data (views, tabel Iceberg). | 10x lebih efisien daripada mode inkremental untuk tabel dengan frekuensi perubahan tinggi. |
| Tersulut | Alur berjalan sekali untuk mengambil rekam jepret tabel sumber dan menyalinnya ke tabel yang disinkronkan. Tidak seperti mode sinkronisasi Snapshot, saat tabel yang disinkronkan disegarkan, hanya perubahan sejak eksekusi alur terakhir diambil dan diterapkan ke tabel yang disinkronkan. Refresh inkremental dapat dipicu secara manual, melalui API atau sesuai jadwal. | Baris sumber berubah secara bertahap pada irama yang diketahui. Sisipan, pembaruan, dan penghapusan semuanya disebarluaskan pada setiap refresh. | Tradeoff biaya/lag yang baik untuk sinkronisasi sesuai permintaan atau terjadwal. Menjalankan lebih sering daripada setiap 5 menit mungkin lebih mahal dibandingkan dengan modus Kontinu. |
| Berkelanjutan | Alur berjalan sekali untuk mengambil rekam jepret tabel sumber dan menyalinnya ke tabel yang disinkronkan kemudian alur berjalan terus menerus. Perubahan berikutnya pada tabel sumber diterapkan secara bertahap ke tabel yang disinkronkan secara real time. Tidak diperlukan refresh manual. | Perubahan harus muncul di Lakebase dalam waktu hampir nyata. | Jeda terendah, biaya tertinggi. |
Nota
Untuk mendukung mode sinkronisasi yang Dipicu atau Berlanjut, tabel sumber harus diaktifkan perubahan aliran data. Sumber tertentu (seperti Tampilan) tidak mendukung perubahan umpan data sehingga hanya dapat disinkronkan dalam mode Rekam Jepret.
Menjadwalkan atau memicu sinkronisasi berikutnya
Cuplikan awal akan berjalan secara otomatis saat dibuat. Untuk mode Rekam Jepret dan Terpicu , sinkronisasi berikutnya harus dipicu secara eksplisit. Mode berkelanjutan adalah pengelolaan mandiri.
Tugas alur proses Sinkronisasi Tabel Basis Data
Tugas alur Sinkronisasi Tabel Database di Pekerjaan Lakeflow menjalankan alur tabel yang disinkronkan sebagai langkah alur kerja. Konfigurasikan pekerjaan dengan pemicu pembaruan tabel atau jadwal.
Pemicu pada pembaruan tabel sumber
Mengaktifkan pekerjaan saat tabel Unity Catalog sumber diperbarui. Dengan mode Dipicu, perubahan baru hanya diterapkan secara bertahap, memberikan kesegaran yang hampir real-time tanpa biaya mode Berkelanjutan yang selalu aktif.
- Di bilah samping, klik Alur Kerja.
- Klik Buat pekerjaan atau buka pekerjaan yang sudah ada.
- Pada tab Tugas , klik + Tambahkan tipe tugas lain.
- Di bawah Penyerapan dan Transformasi, pilih alur Sinkronisasi Tabel Database.
- Di bidang Alur , pilih alur yang terkait dengan tabel yang disinkronkan.
- Di bawah Jadwal & Pemicu, klik Tambahkan pemicu.
- Pilih Pembaruan tabel sebagai tipe pemicu.
- Di bawah Tabel, pilih tabel sumber dari Katalog Unity untuk diawasi.
- Kliklah Simpan.
Pemicu otomatis berdasarkan jadwal
Menjalankan sinkronisasi pada irama tetap. Cocok untuk mode Rekam Jepret , di mana refresh penuh malam atau mingguan biasanya merupakan pola yang paling efisien.
- Ikuti langkah 1–5 di atas untuk menambahkan tugas alur Sinkronisasi Tabel Database ke pekerjaan.
- Di bawah Jadwal & Pemicu, klik Tambahkan pemicu.
- Pilih Terjadwal sebagai jenis pemicu.
- Atur jadwal dan zona waktu cron Anda, lalu klik Simpan.
Menggunakan SDK
Picu sinkronisasi berjalan secara terprogram, misalnya di akhir buku catatan upstram atau alur:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# Get the pipeline ID from the synced table
table = w.database.get_synced_database_table(name="catalog.schema.synced_table")
pipeline_id = table.data_synchronization_status.pipeline_id
# Trigger a sync run
w.pipelines.start_update(pipeline_id=pipeline_id)
Operasi yang didukung
Azure Databricks merekomendasikan untuk hanya melakukan operasi berikut di Postgres untuk tabel yang disinkronkan untuk mencegah penimpaan atau inkonsistensi data yang tidak disengaja:
- Kueri baca-saja
- Membuat indeks
- Menjatuhkan tabel (untuk mengosongkan ruang setelah menghapus tabel yang disinkronkan dari Katalog Unity)
meskipun dimungkinkan untuk memodifikasi tabel yang disinkronkan di Postgres dengan cara lain, tabel tersebut mengganggu alur sinkronisasi.
Menghapus tabel yang disinkronkan
Untuk menghapus tabel yang disinkronkan, Anda harus menghapusnya dari Katalog Unity lalu meletakkan tabel dalam instans database. Menghapus tabel yang disinkronkan dari Katalog Unity membatalkan pendaftaran tabel dan menghentikan refresh data apa pun. Namun, tabel tetap berada dalam database Postgres yang mendasar. Untuk mengosongkan ruang dalam instans database Anda, sambungkan ke instans dan gunakan DROP TABLE perintah .
Antarmuka Pengguna
- Klik Katalog di bilah sisi ruang kerja.
- Temukan dan pilih tabel yang disinkronkan yang ingin Anda hapus.
- Klik
>Hapus.
- Sambungkan ke instans dengan
psql, editor SQL, atau dari buku catatan. - Hapus tabel menggunakan PostgreSQL.
DROP TABLE synced_table_database.synced_table_schema.synced_table
Python SDK
from databricks.sdk import WorkspaceClient
# Initialize the Workspace client
w = WorkspaceClient()
# Delete a synced table from UC
synced_table_name = "catalog.schema.synced_table"
w.database.delete_synced_database_table(name=synced_table_name)
print(f"Deleted synced table from UC: {synced_table_name}")
# To free up space in your database instance, you need to connect to the
# instance and drop the table using PostgreSQL:
#
# DROP TABLE synced_table_database.synced_table_schema.synced_table;
antarmuka baris perintah (CLI)
# Delete a synced table from UC
databricks database delete-synced-database-table "catalog.schema.synced_table"
# To free up space in your database instance, you need to connect to the
# instance and drop the table using PostgreSQL:
#
# DROP TABLE synced_table_database.synced_table_schema.synced_table;
melengkung
# Delete a synced table from UC
curl -X DELETE --header "Authorization: Bearer ${DATABRICKS_TOKEN}" \
https://$WORKSPACE/api/2.0/database/synced_tables/$SYNCED_TABLE_NAME
# To free up space in your database instance, you need to connect to the
# instance and drop the table using PostgreSQL:
#
# DROP TABLE synced_table_database.synced_table_schema.synced_table;
Kepemilikan dan izin
Jika Anda membuat database, skema, atau tabel Postgres baru, kepemilikan Postgres diatur sebagai berikut:
- Kepemilikan ditetapkan kepada pengguna yang membuat database, skema, atau tabel, jika login Azure Databricks mereka ada sebagai peran di Postgres. Untuk menambahkan peran identitas Azure Databricks dalam PostgreSQL, lihat Manajemen peran PostgreSQL.
- Jika tidak, kepemilikan ditetapkan kepada pemilik objek induk di Postgres (biasanya
databricks_superuser).
Mengelola akses tabel yang disinkronkan
Setelah tabel yang disinkronkan dibuat, databricks_superuser dapat READ tabel yang disinkronkan dari Postgres.
databricks_superuser memiliki pg_read_all_data, yang memungkinkan peran ini membaca dari semua tabel. Ini juga memiliki hak istimewa pg_write_all_data, yang memungkinkan peran ini untuk menulis ke semua tabel. Ini berarti bahwa databricks_superuser juga dapat menulis ke tabel yang disinkronkan di Postgres. Lakebase mendukung perilaku penulisan ini jika Anda perlu membuat perubahan mendesak dalam tabel target Anda. Namun, Databricks merekomendasikan untuk membuat perbaikan di tabel sumber Anda sebagai gantinya.
juga
databricks_superuserdapat memberikan hak istimewa ini kepada pengguna lain:GRANT USAGE ON SCHEMA synced_table_schema TO user;GRANT SELECT ON synced_table_name TO user;databricks_superuserdapat mencabut hak istimewa ini:REVOKE USAGE ON SCHEMA synced_table_schema FROM user;REVOKE {SELECT | INSERT | UPDATE | DELETE} ON synced_table_name FROM user;
Mengelola operasi tabel yang disinkronkan
databricks_superuser dapat mengelola siapa saja pengguna yang diizinkan melakukan operasi tertentu pada tabel yang disinkronkan. Operasi yang didukung untuk tabel yang disinkronkan adalah:
CREATE INDEXALTER INDEXDROP INDEXDROP TABLE
Semua operasi DDL lainnya ditolak untuk tabel yang disinkronkan.
Untuk memberikan hak istimewa ini kepada pengguna tambahan, databricks_superuser harus terlebih dahulu membuat ekstensi pada databricks_auth:
CREATE EXTENSION IF NOT EXISTS databricks_auth;
databricks_superuser Kemudian dapat menambahkan pengguna untuk mengelola tabel yang disinkronkan:
SELECT databricks_synced_table_add_manager('"synced_table_schema"."synced_table"'::regclass, '[user]');
databricks_superuser dapat menghapus pengguna dari mengelola tabel yang disinkronkan:
SELECT databricks_synced_table_remove_manager('[table]', '[user]');
databricks_superuser dapat melihat semua manajer:
SELECT * FROM databricks_synced_table_managers;
Pemetaan jenis data
Tabel pemetaan jenis ini menentukan bagaimana setiap jenis data dalam tabel Unity Catalog sumber dipetakan ke tabel sinkronisasi tujuan di Postgres:
| Jenis kolom sumber | Jenis kolom Postgres |
|---|---|
| BIGINT | BIGINT |
| BINER | BYTEA |
| BOOLEAN | BOOLEAN |
| TANGGAL | DATE |
| DECIMAL(p,s) | NUMERIK |
| DOBEL | PRESISI GANDA |
| FLOAT | WAKTU NYATA |
| INT | INTEGER |
| INTERVAL intervalQualifier | interval waktu |
| SMALLINT | SMALLINT |
| STRING | TEKS |
| TIMESTAMP | PENANDA WAKTU DENGAN ZONA WAKTU |
| TIMESTAMP_NTZ | TANDA WAKTU TANPA ZONA WAKTU |
| TINYINT | SMALLINT |
| GEOGRAPHY(srid) | TIDAK DIDUKUNG |
| GEOMETRI (srid) | TIDAK DIDUKUNG |
| ARRAY < elementType > | JSONB |
| MAP < keyType,valueType > | JSONB |
| STRUCT < [fieldName : fieldType [NOT NULL][COMMENT str][, ...]] > | JSONB |
| VARIAN | JSONB |
| OBJEK | TIDAK DIDUKUNG |
Nota
- Pemetaan untuk jenis ARRAY, MAP, dan STRUCT diubah pada Mei 2025. Tabel yang disinkronkan sebelum itu akan terus memetakan jenis ini ke JSON.
- Pemetaan untuk TIMESTAMP diubah pada Agustus 2025. Sinkronkan tabel yang dibuat sebelum itu terus memetakannya ke TIMESTAMP TANPA ZONA WAKTU.
Menangani karakter yang tidak valid
Karakter tertentu, seperti byte null (0x00), diizinkan dalam kolom STRING, ARRAY, MAP, atau STRUCT pada tabel Delta tetapi tidak didukung di kolom Postgres TEXT atau JSONB. Akibatnya, menyinkronkan data tersebut dari Delta ke Postgres dapat menyebabkan kegagalan penyisipan dengan kesalahan:
org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00
org.postgresql.util.PSQLException: ERROR: unsupported Unicode escape sequence DETAIL: \u0000 cannot be converted to text.
- Kesalahan pertama terjadi ketika byte null muncul di kolom string tingkat atas, yang langsung dipetakan ke Postgres
TEXT. - Kesalahan kedua terjadi ketika byte null muncul dalam string yang disarangkan di dalam jenis kompleks (
STRUCT,ARRAY, atauMAP), yang diserialkan oleh Azure Databricks sebagaiJSONB. Selama serialisasi, semua string ditransmisikan ke PostgresTEXT, di mana\u0000tidak diizinkan.
Cara mengatasinya:
Anda dapat mengatasi masalah ini dengan salah satu cara berikut:
Membersihkan bidang string
Hapus atau ganti karakter yang tidak kompatibel dari semua bidang string, termasuk yang berada di dalam tipe data kompleks, sebelum menyinkronkan ke Postgres.
Untuk menghapus byte null dari kolom tingkat
STRINGatas, gunakanREPLACEfungsi :SELECT REPLACE(column_name, CAST(CHAR(0) AS STRING), '') AS cleaned_column FROM your_table;Konversi ke biner (hanya untuk
STRINGkolom)Jika mempertahankan konten byte mentah diperlukan, konversikan kolom yang terpengaruh
STRINGmenjadiBINARY.
Batasan dan pertimbangan
Tabel sumber yang didukung
Bergantung pada mode sinkronisasi tabel yang disinkronkan, berbagai jenis tabel sumber didukung:
Untuk mode Rekam Jepret, tabel sumber harus mendukung
SELECT *. Contohnya termasuk tabel Delta, tabel Iceberg, tampilan, tampilan materialisasi, dan jenis serupa lainnya.Untuk Mode sinkronisasi Terpicu atau Berkelanjutan, tabel sumber juga harus mengaktifkan umpan data perubahan .
Batasan penamaan dan pengenal
-
Karakter yang diizinkan: Nama database, skema, dan tabel Postgres untuk tabel yang disinkronkan mungkin hanya berisi karakter alfanumerik dan garis bawah (
[A-Za-z0-9_]+). Tanda hubung (-) dan karakter khusus lainnya tidak didukung. - Pengidentifikasi kolom dan tabel: Hindari menggunakan huruf besar atau karakter khusus dalam nama kolom atau tabel dalam tabel Unity Catalog sumber. Jika disimpan, Anda perlu mengutip pengidentifikasi ini saat mereferensikannya di Postgres.
Kinerja dan sinkronisasi
- Kecepatan sinkronisasi: Menyinkronkan data ke dalam tabel yang disinkronkan mungkin lebih lambat daripada menulis data langsung ke instans database dengan klien PostgreSQL asli karena pemrosesan tambahan. Mode sinkronisasi berkelanjutan me-refresh data dari tabel terkelola Katalog Unity ke tabel yang disinkronkan dengan interval minimum 15 detik.
- Penggunaan koneksi: Setiap sinkronisasi tabel dapat menggunakan hingga 16 koneksi ke instans database, yang dihitung terhadap batas koneksi instans.
- Idempotensi API: API tabel yang tersinkronisasi adalah idempoten dan mungkin perlu dicoba ulang jika terjadi kesalahan untuk memastikan operasi berlangsung tepat waktu.
-
Perubahan skema: Untuk tabel yang disinkronkan dalam
TriggeredatauContinuousmode, hanya perubahan skema aditif (misalnya, menambahkan kolom baru) dari tabel Katalog Unity yang diterapkan pada tabel yang disinkronkan. - Kunci duplikat: Jika dua baris memiliki kunci utama yang sama dalam tabel sumber, alur sinkronisasi gagal kecuali Anda mengonfigurasi deduplikasi menggunakan kunci timeseries. Namun, menggunakan kunci timeseries dapat mengurangi kinerja.
- Laju pembaruan: Untuk Lakebase Provisioned, alur sinkronisasi mendukung penulisan Berkelanjutan dan Terpicu pada sekitar 1200 baris per detik per Unit Kapasitas (CU) dan Penulisan rekam jepret hingga 15.000 baris per detik per CU.
Kapasitas dan batasan
-
Batas tabel:
- Batas 20 tabel yang disinkronkan per tabel sumber.
- Setiap sinkronisasi tabel dapat menggunakan hingga 16 koneksi database.
-
Batas ukuran dan refresh penuh:
- Jika Anda me-refresh penuh tabel yang disinkronkan, versi lama di Postgres tidak dihapus hingga tabel baru disinkronkan. Kedua versi untuk sementara masuk dalam perhitungan batas ukuran database logis selama refresh.
- Tabel individual yang disinkronkan tidak memiliki batas, tetapi batas ukuran data logis total di semua tabel dalam instans adalah 2 TB. Namun, jika Anda memerlukan penyegaran alih-alih pembuatan ulang tabel secara penuh, Databricks merekomendasikan untuk tidak melebihi 1 TB.
- Jika ukuran format baris tabel Unity Catalog yang tidak dikompresi melebihi batas ukuran instans database (2 TB), sinkronisasi gagal. Anda harus menghilangkan tabel yang disinkronkan di Postgres sebelum menulis lebih lanjut ke instans.
Integrasi katalog
- Duplikasi katalog: Membuat tabel yang disinkronkan dalam katalog standar yang menargetkan database Postgres yang juga terdaftar sebagai katalog database terpisah menyebabkan tabel yang disinkronkan muncul di Katalog Unity di bawah katalog standar dan database.