Menyajikan data lakehouse dengan tabel yang disinkronkan

Penting

Lakebase Autoscaling adalah versi terbaru Lakebase, dengan komputasi penskalaan otomatis, skala-ke-nol, percabangan, dan pemulihan instan. Untuk wilayah yang didukung, lihat Ketersediaan wilayah. Jika Anda adalah pengguna Lakebase Provisioned, lihat Lakebase Provisioned.

Tabel yang disinkronkan memungkinkan Anda menyajikan data lakehouse melalui Lakebase Postgres. 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.

Diagram arsitektur memperlihatkan aliran data dari lakehouse ke Lakebase ke aplikasi

Apa itu tabel yang disinkronkan?

Tabel yang disinkronkan memungkinkan Anda menyajikan data tingkat analitik dari Unity Catalog melalui Lakebase Postgres, membuatnya tersedia untuk aplikasi yang membutuhkan kueri latensi rendah (sub-10ms) dan transaksi ACID penuh. Mereka menjembatani kesenjangan antara penyimpanan analitik dan sistem operasional dengan memastikan data Anda siap untuk digunakan dalam aplikasi real-time.

Sumber yang didukung

Tabel yang disinkronkan mendukung jenis sumber Katalog Unity berikut ini:

  • Tabel Delta terkelola dan eksternal
  • Tabel Iceberg terkelola dan eksternal
  • Pandangan dan pandangan terwujud

Cara kerjanya

Tabel yang disinkronkan Databricks membuat salinan terkelola data Unity Catalog Anda di Lakebase. Saat membuat tabel yang disinkronkan, Anda mendapatkan:

  1. Tabel yang disinkronkan di Katalog Unity yang mereferensikan alur sinkronisasi
  2. Tabel Postgres di Lakebase (baca-saja, dapat dikueri oleh aplikasi Anda)

Diagram memperlihatkan hubungan tiga tabel dalam tabel yang disinkronkan

Misalnya, Anda dapat menyinkronkan tabel emas, fitur rekayasa, atau output ML dari analytics.gold.user_profiles ke dalam tabel analytics.gold.user_profiles_syncedbaru yang disinkronkan . Di Postgres, nama skema Katalog Unity menjadi nama skema Postgres, sehingga muncul sebagai gold.user_profiles_synced:

SELECT * FROM gold.user_profiles_synced WHERE user_id = 12345;

Aplikasi terhubung dengan driver Postgres standar dan mengkueri data yang disinkronkan bersama status operasionalnya sendiri.

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.

Alur sinkronisasi menggunakan Alur Deklaratif Lakeflow Spark terkelola untuk terus memperbarui tabel yang disinkronkan Katalog Unity dan tabel Postgres dengan perubahan dari tabel sumber. Setiap sinkronisasi dapat menggunakan hingga 16 koneksi ke database Lakebase Anda.

Lakebase Postgres mendukung hingga 1.000 koneksi bersamaan dengan jaminan transaksional, sehingga aplikasi dapat membaca data yang diperkaya sambil juga menangani sisipan, pembaruan, dan penghapusan dalam database yang sama.

Mode sinkronisasi

Pilih mode sinkronisasi yang tepat berdasarkan kebutuhan aplikasi Anda:

Modus Deskripsi Kapan digunakan Kinerja
Snapshot Salin sekali semua data Perubahan sumber >10% baris per siklus, atau sumber tidak mendukung CDF (tampilan, tabel Iceberg) 10x lebih efisien jika memodifikasi >10% data sumber
Diaktifkan Pembaruan terjadwal yang dijalankan sesuai permintaan atau pada interval Baris sumber berubah pada frekuensi yang diketahui. Penyisipan, pembaruan, dan penghapusan dilakukan setiap pemutakhiran. Keseimbangan biaya/keterlambatan yang baik. Mahal jika dijalankan pada interval <5 menit
Terus-menerus Streaming real-time dengan latensi beberapa detik Perubahan harus muncul di Lakebase dalam waktu hampir real time Jeda terendah, biaya tertinggi. Interval minimum 15 detik

Mode Terpicu dan Berkelanjutan mengharuskan Umpan Data Perubahan (CDF) diaktifkan pada tabel sumber Anda. Jika CDF tidak diaktifkan, Anda akan melihat peringatan di UI dengan perintah yang tepat ALTER TABLE yang harus dijalankan. Untuk informasi lebih lanjut mengenai Change Data Feed, lihat Gunakan Change Data Feed Delta Lake di Databricks.

Contoh kasus penggunaan

Anda dapat menggunakan tabel yang disinkronkan untuk kasus penggunaan penyajian data seperti:

  • Mesin personalisasi yang melayani profil pengguna baru ke Aplikasi Databricks
  • Aplikasi yang melayani prediksi model atau nilai fitur yang dihitung di lakehouse
  • Dasbor yang menghadap pelanggan yang melayani KPI secara real time
  • Layanan deteksi penipuan yang melayani skor risiko untuk tindakan segera
  • Perangkat pendukung yang menyajikan catatan pelanggan yang diperkaya dari data lakehouse

Membuat tabel yang disinkronkan

Prasyarat

Anda memerlukan:

  • Ruang kerja Databricks yang mengaktifkan Lakebase.
  • Proyek Lakebase (lihat Membuat proyek).
  • Tabel Katalog Unity untuk sinkronisasi.
  • Izin untuk membuat tabel yang disinkronkan. Anda memerlukan USE_SCHEMA dan CREATE_TABLE pada skema apa pun yang Anda gunakan.

Untuk mode Dipicu atau Berkelanjutan , Ubah Umpan Data harus diaktifkan pada tabel sumber Anda:

ALTER TABLE your_catalog.your_schema.your_table
SET TBLPROPERTIES (delta.enableChangeDataFeed = true)

Untuk perencanaan kapasitas dan kompatibilitas jenis data, lihat Jenis data dan kompatibilitas dan Perencanaan kapasitas.

Antarmuka Pengguna

  1. Buka Katalog di bilah samping ruang kerja dan pilih tabel Katalog Unity yang ingin Anda sinkronkan.

    Penjelajah Katalog memperlihatkan tabel yang dipilih

  2. Klik Buat>tabel Yang Disinkronkan dari tampilan detail tabel.

    Tombol Dropdown Buat memperlihatkan opsi Tabel Disinkronisasi

  3. Dalam dialog Buat tabel yang disinkronkan :

    Daftar katalog dan skema hanya menyertakan skema Katalog Unity di mana pengguna saat ini memiliki hak istimewa USE_SCHEMA dan CREATE_TABLE . Jika Anda tidak melihat skema yang Anda harapkan, konfirmasikan izin Anda dengan admin katalog Anda.

    1. Nama tabel: Masukkan nama untuk tabel yang disinkronkan (dibuat dalam katalog dan skema yang sama dengan tabel sumber Anda). Ini membuat tabel yang disinkronkan dengan Katalog Unity dan tabel Postgres yang dapat Anda kueri.
    2. Jenis database: Pilih Lakebase Serverless (Autoscaling).
    3. Mode sinkronisasi: Pilih Rekam Jepret, Dipicu, atau Berkelanjutan berdasarkan kebutuhan Anda (lihat mode sinkronisasi di atas).
    4. Konfigurasikan pilihan proyek, cabang, dan database Anda.
    5. Verifikasi kunci Primer sudah benar (biasanya terdeteksi otomatis).

    Jika Anda memilih mode Terpicu atau Berkelanjutan dan belum mengaktifkan Ubah Umpan Data, Anda akan melihat peringatan dengan perintah yang tepat untuk dijalankan. Untuk pertanyaan kompatibilitas jenis data, lihat Jenis dan kompatibilitas data.

    Klik Buat untuk membuat tabel yang disinkronkan.

  4. Pantau tabel yang disinkronkan di Katalog. Tab Gambaran Umum memperlihatkan status sinkronisasi, konfigurasi, status alur, dan tanda waktu sinkronisasi terakhir. Gunakan Sinkronkan sekarang untuk refresh manual.

Python SDK

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import (
    SyncedTable,
    SyncedTableSyncedTableSpec,
    SyncedTableSyncedTableSpecSyncedTableSchedulingPolicy,
)

w = WorkspaceClient()

synced_table = w.postgres.create_synced_table(
    synced_table=SyncedTable(spec=SyncedTableSyncedTableSpec(
        source_table_full_name="main.sales.orders",
        branch="projects/my-project/branches/production",
        primary_key_columns=["order_id"],
        scheduling_policy=SyncedTableSyncedTableSpecSyncedTableSchedulingPolicy.SNAPSHOT,
        postgres_database="mydb",
        create_database_objects_if_missing=True,
    )),
    synced_table_id="my-catalog.sales.orders",
).wait()

print(f"Synced table created: {synced_table.name}")

synced_table_id menggunakan format catalog.schema.table dan menjadi nama tabel yang disinkronkan Katalog Unity. Di Postgres, tabel {table} dibuat dalam skema {schema}, di dalam database yang Anda atur dengan postgres_database (di sini, mydb).

Java SDK

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.*;
import java.util.List;

WorkspaceClient w = new WorkspaceClient();

SyncedTable syncedTable = w.postgres().createSyncedTable(
    new CreateSyncedTableRequest()
        .setSyncedTableId("my-catalog.sales.orders")
        .setSyncedTable(new SyncedTable()
            .setSpec(new SyncedTableSyncedTableSpec()
                .setSourceTableFullName("main.sales.orders")
                .setBranch("projects/my-project/branches/production")
                .setPrimaryKeyColumns(List.of("order_id"))
                .setSchedulingPolicy(SyncedTableSyncedTableSpecSyncedTableSchedulingPolicy.SNAPSHOT)
                .setPostgresDatabase("mydb")
                .setCreateDatabaseObjectsIfMissing(true))))
    .waitForCompletion();

System.out.println("Synced table created: " + syncedTable.getName());

melengkung

curl -X POST "https://your-workspace.cloud.databricks.com/api/2.0/postgres/synced_tables?synced_table_id=my-catalog.sales.orders" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "spec": {
      "source_table_full_name": "main.sales.orders",
      "branch": "projects/my-project/branches/production",
      "primary_key_columns": ["order_id"],
      "scheduling_policy": "SNAPSHOT",
      "postgres_database": "mydb",
      "create_database_objects_if_missing": true
    }
  }'

Ini menghasilkan operasi jangka panjang. Lakukan polling pada bagian yang dikembalikan name hingga done: true. Lihat Operasi jangka panjang. Untuk penyiapan autentikasi, lihat Autentikasi.

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.

  1. Di bilah samping, klik Alur Kerja.
  2. Klik Buat pekerjaan atau buka pekerjaan yang sudah ada.
  3. Pada tab Tugas , klik + Tambahkan tipe tugas lain.
  4. Di bawah Penyerapan dan Transformasi, pilih alur Sinkronisasi Tabel Database.
  5. Di bidang Alur , pilih alur yang terkait dengan tabel yang disinkronkan.
  6. Di bawah Jadwal & Pemicu, klik Tambahkan pemicu.
  7. Pilih Pembaruan tabel sebagai tipe pemicu.
  8. Di bawah Tabel, pilih tabel sumber dari Katalog Unity untuk diawasi.
  9. 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.

  1. Ikuti langkah 1–5 di atas untuk menambahkan tugas alur Sinkronisasi Tabel Database ke pekerjaan.
  2. Di bawah Jadwal & Pemicu, klik Tambahkan pemicu.
  3. Pilih Terjadwal sebagai jenis pemicu.
  4. Atur jadwal dan zona waktu cron Anda, lalu klik Simpan.

Periksa status sinkronisasi

Untuk memeriksa status saat ini dan waktu sinkronisasi terakhir tabel yang disinkronkan:

Antarmuka Pengguna

Di Katalog, navigasikan ke tabel yang disinkronkan dan pilih tab Gambaran Umum . Ini menunjukkan status sinkronisasi saat ini, status alur, dan tanda waktu sinkronisasi terakhir.

Python SDK

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

table = w.postgres.get_synced_table("synced_tables/my-catalog.sales.orders")
print(f"State: {table.status.detailed_state}")
print(f"Last sync: {table.status.last_sync_time}")
print(f"Message: {table.status.message}")

Java SDK

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.SyncedTable;

WorkspaceClient w = new WorkspaceClient();

SyncedTable table = w.postgres().getSyncedTable("synced_tables/my-catalog.sales.orders");
System.out.println("State: " + table.getStatus().getDetailedState());
System.out.println("Last sync: " + table.getStatus().getLastSyncTime());
System.out.println("Message: " + table.getStatus().getMessage());

melengkung

curl "https://your-workspace.cloud.databricks.com/api/2.0/postgres/synced_tables/my-catalog.sales.orders" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}"

Jenis dan kompatibilitas data

Jenis data Unity Catalog dipetakan ke jenis Postgres saat membuat tabel yang disinkronkan. Jenis kompleks (ARRAY, MAP, STRUCT) disimpan sebagai JSONB di Postgres.

Jenis kolom sumber Jenis kolom Postgres
BIGINT BIGINT
BINARY BYTEA
BOOLEAN BOOLEAN
DATE DATE
DECIMAL(p,s) NUMERIK
dobel PRESISI GANDA
FLOAT WAKTU NYATA
INT INTEGER
INTERVAL INTERVAL
SMALLINT SMALLINT
string TEKS
TIMESTAMP PENANDA WAKTU DENGAN ZONA WAKTU
TIMESTAMP_NTZ TANDA WAKTU TANPA ZONA WAKTU
TINYINT SMALLINT
ARRAY<elemenTipe> JSONB
MAP<tipeKunci,tipeNilai> JSONB
STRUCT<fieldName:fieldType[, ...]> JSONB

Nota

Jenis GEOGRAFI, GEOMETRI, VARIAN, dan OBJEK tidak didukung.

Menangani karakter yang tidak valid

Karakter tertentu seperti byte null (0x00) diizinkan di kolom STRING, ARRAY, MAP, atau STRUCT pada Unity Catalog tetapi tidak didukung di kolom Postgres TEXT atau JSONB. Ini dapat menyebabkan kegagalan sinkronisasi dengan kesalahan seperti:

ERROR: invalid byte sequence for encoding "UTF8": 0x00
ERROR: unsupported Unicode escape sequence DETAIL: \u0000 cannot be converted to text

Solusi:

  • Membersihkan bidang string: Hapus karakter yang tidak didukung sebelum menyinkronkan. Untuk byte nol dalam kolom STRING:

    SELECT REPLACE(column_name, CAST(CHAR(0) AS STRING), '') AS cleaned_column FROM your_table
    
  • Konversi ke BINARY: Untuk kolom STRING di mana mempertahankan byte mentah diperlukan, konversi ke jenis BINARY.

Perencanaan kapasitas

Saat merencanakan implementasi tabel yang disinkronkan, pertimbangkan persyaratan sumber daya ini:

  • Penggunaan koneksi: Setiap tabel yang disinkronkan menggunakan hingga 16 koneksi ke database Lakebase Anda, yang dihitung terhadap batas koneksi instans.
  • Batas ukuran: Total batas ukuran data logis di semua tabel yang disinkronkan adalah 8 TB. Tabel individual tidak memiliki batas, tetapi Databricks merekomendasikan tidak melebihi 1 TB untuk tabel yang memerlukan refresh.
  • Persyaratan penamaan: Nama database, skema, dan tabel hanya boleh berisi karakter alfanumerik dan garis bawah ([A-Za-z0-9_]+).
  • Evolusi skema: Hanya perubahan skema aditif (seperti menambahkan kolom) yang didukung untuk mode Dipicu dan Berkelanjutan.
  • Laju pembaruan:: Untuk penskalaan otomatis Lakebase, alur sinkronisasi mendukung penulisan berkelanjutan dan dipicu pada sekitar 150 baris per detik per Unit Kapasitas (CU) dan penulisan snapshot hingga 2.000 baris per detik per Unit Kapasitas (CU).

Operasi yang diizinkan pada tabel yang disinkronkan di Postgres

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

Menghapus tabel yang disinkronkan dari Katalog Unity juga menghilangkan tabel Postgres terkait.

Antarmuka Pengguna

Di Katalog, temukan tabel yang disinkronkan, klik ikon menu Kebab. menu, dan pilih Hapus.

Python SDK

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

w.postgres.delete_synced_table("synced_tables/my-catalog.sales.orders").wait()

Java SDK

import com.databricks.sdk.WorkspaceClient;

WorkspaceClient w = new WorkspaceClient();

w.postgres().deleteSyncedTable("synced_tables/my-catalog.sales.orders").waitForCompletion();

melengkung

curl -X DELETE "https://your-workspace.cloud.databricks.com/api/2.0/postgres/synced_tables/my-catalog.sales.orders" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}"

Pelajari lebih lanjut

Tugas Deskripsi
Membuat proyek Menyiapkan proyek Lakebase
Menyambungkan ke database Anda Pelajari opsi koneksi untuk Lakebase
Mendaftarkan database di Katalog Unity Membuat data Lakebase Anda terlihat di Unity Catalog untuk tata kelola terpadu dan kueri lintas sumber
Integrasi Katalog Unity Memahami tata kelola dan izin

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.

Opsi lainnya

Untuk menyinkronkan data ke dalam sistem non-Databricks, lihat Solusi ETL terbalik Partner Connect seperti Sensus atau Hightouch.