Menggunakan Unity Catalog dengan alur

Databricks merekomendasikan untuk mengonfigurasi Alur Deklaratif Lakeflow Spark dengan Unity Catalog. Menggunakan Unity Catalog adalah default untuk alur yang baru dibuat.

Alur yang dikonfigurasi dengan Katalog Unity menerbitkan semua tampilan termaterialisasi dan tabel streaming ke katalog dan skema yang ditentukan. Alur kerja Katalog Unity dapat membaca dari tabel dan volume Katalog Unity lainnya.

Untuk mengelola izin pada tabel yang dibuat oleh alur Katalog Unity, gunakan GRANT dan REVOKE.

Nota

Artikel ini membahas fungsionalitas untuk mode penerbitan default yang saat ini berlaku untuk pipeline. Pipeline yang dibuat sebelum 5 Februari 2025 mungkin menggunakan mode penerbitan lama dan skema virtual LIVE. Lihat skema LIVE (versi lama).

Persyaratan

Untuk membuat tabel streaming dan tampilan materialisasi dalam skema target di Katalog Unity, Anda harus memiliki izin berikut pada skema dan katalog induk:

  • USE CATALOG hak akses istimewa pada katalog target.
  • hak akses CREATE MATERIALIZED VIEW dan USE SCHEMA terhadap skema target jika pipeline Anda membuat tampilan materialisasi .
  • CREATE TABLE dan USE SCHEMA hak akses pada skema target jika pipeline Anda membuat tabel streaming.
  • Jika alur Anda membuat skema baru, Anda harus memiliki izin USE CATALOG dan CREATE SCHEMA pada katalog target.

Persyaratan komputasi untuk menjalankan alur yang mendukung Katalog Unity:

  • Sumber daya komputasi Anda harus dikonfigurasi dengan mode akses standar. Komputasi khusus tidak didukung. Lihat Mode akses.

Komputasi yang diperlukan untuk mengkueri tabel yang dibuat oleh alur menggunakan Katalog Unity (termasuk tabel streaming dan tampilan materialisasi) mencakup salah satu hal berikut ini:

  • Gudang SQL
  • Mode akses standar dihitung pada Databricks Runtime 13.3 LTS atau yang lebih baru.
  • Mode akses khusus untuk komputasi, jika kontrol akses yang lebih rinci diaktifkan pada komputasi khusus (yaitu, berjalan pada Databricks Runtime 15.4 atau lebih tinggi dan komputasi tanpa server diaktifkan untuk ruang kerja). Untuk informasi selengkapnya, lihat Kontrol akses terperindar pada komputasi khusus.
  • Komputasi dalam mode akses khusus pada 13.3 LTS hingga 15.3, hanya jika pemilik tabel menjalankan query tersebut.

Batasan komputasi tambahan berlaku. Lihat bagian berikut ini.

Batasan

Berikut ini adalah batasan saat menggunakan Unity Catalog dengan alur:

  • Anda tidak dapat membuat pipeline yang diaktifkan oleh Katalog Unity di ruang kerja yang terhubung ke metastore yang dibuat selama Pratinjau Umum Katalog Unity. Lihat Peningkatan ke pewarisan hak istimewa.
  • JAR tidak dapat didukung. Hanya pustaka Python pihak ketiga yang didukung. Lihat Kelola dependensi Python untuk alur.
  • Kueri bahasa manipulasi data (DML) yang mengubah skema tabel streaming tidak didukung.
  • Tampilan materialisasi yang dibuat dalam pipeline tidak dapat digunakan sebagai sumber streaming di luar pipeline tersebut, misalnya, di pipeline lain atau notebook di tahap selanjutnya.
  • Data untuk tampilan materialis dan tabel streaming disimpan di lokasi penyimpanan untuk skema yang menampung. Jika lokasi penyimpanan skema tidak ditentukan, tabel disimpan di lokasi penyimpanan katalog. Jika lokasi penyimpanan skema dan katalog tidak ditentukan, tabel disimpan di lokasi penyimpanan akar metastore.
  • Tab Riwayat Penjelajah Katalog tidak menampilkan riwayat untuk tampilan materialisasi.
  • Properti LOCATION tidak didukung saat menentukan tabel.
  • Alur yang menggunakan Unity Catalog tidak dapat diterbitkan ke metastore Hive.
  • Dukungan untuk UDF Python sedang dalam Pratinjau Umum.

Nota

File dasar yang mendukung tampilan materialisasi mungkin menyertakan data dari tabel upstream (termasuk kemungkinan informasi pribadi yang dapat diidentifikasi) yang tidak muncul dalam definisi tampilan materialisasi. Data ini secara otomatis ditambahkan ke penyimpanan dasar untuk mendukung penyegaran tampilan materialisasi secara inkremental.

Karena file dasar dari tampilan materialisasi mungkin berisiko mengekspos data dari tabel hulu yang bukan bagian dari skema tampilan materialisasi, Databricks merekomendasikan untuk tidak berbagi penyimpanan dasar dengan konsumen hilir yang tidak tepercaya.

Misalnya, definisi tampilan materialisasi menyertakan klausa COUNT(DISTINCT field_a). Meskipun definisi tampilan materialisasi hanya menyertakan klausul agregat COUNT DISTINCT, file dasar akan berisi daftar nilai aktual field_a.

Dapatkah saya menggunakan Hive Metastore dan pipeline Katalog Unity bersama-sama?

Ruang kerja Anda dapat berisi pipeline yang menggunakan Unity Catalog dan metastore Hive versi lama. Namun, pipa data tunggal tidak dapat menulis ke metastore Hive dan Katalog Unity. Alur kerja yang ada yang menulis ke metastore Hive tidak dapat dimutakhirkan untuk menggunakan Katalog Unity. Untuk memigrasikan alur yang sudah ada yang menulis ke metastore Apache Hive, Anda harus membuat alur baru dan menyerap ulang data dari sumber data. Lihat Buat alur Katalog Unity dengan mengkloning alur metastore Apache Hive.

Alur yang sudah ada yang tidak menggunakan Katalog Unity tidak akan terpengaruh ketika membuat alur baru yang dikonfigurasi dengan Katalog Unity. Alur ini terus menyimpan data ke metastore Apache Hive menggunakan lokasi penyimpanan yang dikonfigurasi.

Kecuali ditentukan sebaliknya dalam dokumen ini, semua sumber data dan fungsionalitas alur yang ada didukung dengan alur yang menggunakan Katalog Unity. Antarmuka Python dan SQL didukung dengan alur yang menggunakan Katalog Unity.

Tabel tidak aktif

Saat alur dikonfigurasi untuk menyimpan data ke Unity Catalog, alur mengelola siklus hidup dan izin tabel.

Tabel dapat menjadi tidak aktif jika definisinya dihapus dari alur. Pembaruan pipeline berikutnya menandai tampilan materialisasi atau entri tabel streaming yang sesuai sebagai tidak aktif.

Jika Anda mengubah katalog atau skema default alur dan tidak menggunakan nama tabel yang sepenuhnya memenuhi syarat dalam kode sumber alur, eksekusi alur berikutnya membuat tampilan materialisasi atau tabel streaming di katalog atau skema baru, dan tampilan materialisasi atau tabel streaming sebelumnya di lokasi lama ditandai sebagai tidak aktif.

Anda masih bisa mengkueri tabel yang tidak aktif, tetapi alur tidak lagi memperbaruinya. Untuk membersihkan tampilan materialisasi atau tabel streaming, gunakan DROP secara eksplisit untuk tabel. Tabel tidak aktif akan dihapus saat alur dihapus.

  • Anda dapat memulihkan tabel yang dihilangkan dalam waktu 7 hari dengan menggunakan UNDROP perintah .
  • Untuk mempertahankan perilaku bawaan di mana tampilan terwujud atau entri tabel streaming dihapus dari Katalog Unity pada pembaruan alur kerja berikutnya, atur konfigurasi alur kerja "pipelines.dropInactiveTables": "true". Data aktual disimpan selama periode tertentu sehingga dapat dipulihkan jika dihapus secara tidak sengaja. Data dapat dipulihkan dalam waktu 7 hari dengan menambahkan tampilan materialisasi atau tabel streaming kembali ke definisi alur.

Menghapus alur sepenuhnya (dibandingkan dengan menghapus definisi tabel dari sumber alur) juga menghapus semua tabel yang ditentukan dalam alur tersebut. UI meminta Anda untuk mengonfirmasi penghapusan alur.

Menghapus alur

Saat Anda menghapus alur Katalog Unity, tampilan materialisasi terkait, tabel streaming, dan tampilan juga dihapus.

Untuk menghapus alur dan mempertahankan tabelnya, gunakan cascade bidang di API. Tabel yang dipertahankan tidak aktif, tetapi dapat dikueri. Anda dapat memindahkan tabel yang tidak aktif ke alur baru, dan jika dilampirkan ke alur, tabel tersebut akan diaktifkan kembali. Lihat Memindahkan tabel antar alur.

DELETE /api/2.0/pipelines/{pipeline_id}?cascade=false

Lihat Menghapus alur dalam dokumentasi Databricks REST API.

Menulis tabel ke Unity Catalog dari alur

Untuk menulis tabel Anda ke Unity Catalog, Anda harus mengonfigurasi pipeline Anda untuk bekerja dengannya melalui ruang kerja Anda. Saat Anda membuat alur, pilih Katalog Unity di bawah Opsi penyimpanan, pilih katalog di menu drop-down Katalog , dan pilih skema yang sudah ada atau masukkan nama untuk skema baru di menu drop-down Skema target . Untuk mempelajari tentang katalog Unity, lihat Apa itu katalog di Azure Databricks?. Untuk mempelajari tentang skema di Katalog Unity, lihat Apa skema dalam Azure Databricks?.

Memasukkan data ke dalam alur Katalog Unity

Alur Anda yang dikonfigurasi untuk menggunakan Unity Catalog dapat membaca data dari:

  • Tabel yang dikelola dan eksternal, tampilan, tampilan materialisasi, dan tabel streaming di Unity Catalog.
  • Tabel dan tampilan metastore Hive.
  • Auto Loader menggunakan fungsi read_files() untuk membaca dari lokasi eksternal di Unity Catalog.
  • Apache Kafka dan Amazon Kinesis.

Berikut ini adalah contoh membaca dari tabel Unity Catalog dan metastore Hive.

Pemasukan batch dari tabel Unity Catalog

SQL

CREATE OR REFRESH MATERIALIZED VIEW
  table_name
AS SELECT
  *
FROM
  my_catalog.my_schema.table1;

Python

@dp.materialized_view
def table_name():
  return spark.read.table("my_catalog.my_schema.table")

Melakukan streaming perubahan dari tabel Katalog Unity

SQL

CREATE OR REFRESH STREAMING TABLE
  table_name
AS SELECT
  *
FROM
  STREAM(my_catalog.my_schema.table1);

Python

@dp.table
def table_name():
  return spark.readStream.table("my_catalog.my_schema.table")

Mengimpor data dari metastore Apache Hive

Alur yang menggunakan Unity Catalog dapat membaca data dari tabel metastore Hive menggunakan katalog hive_metastore:

SQL

CREATE OR REFRESH MATERIALIZED VIEW
  table_name
AS SELECT
  *
FROM
  hive_metastore.some_schema.table;

Python

@dp.materialized_view
def table3():
  return spark.read.table("hive_metastore.some_schema.table")

Memuat data dari Auto Loader

SQL

CREATE OR REFRESH STREAMING TABLE table_name
AS SELECT *
FROM STREAM read_files(
  "/path/to/uc/external/location",
  format => "json"
)

Python

@dp.table(table_properties={"quality": "bronze"})
def table_name():
  return (
     spark.readStream.format("cloudFiles")
     .option("cloudFiles.format", "json")
     .load(f"{path_to_uc_external_location}")
 )

Bagikan pandangan terwujud

Secara default, hanya pemilik alur yang memiliki izin untuk mengkueri himpunan data yang dibuat oleh alur. Anda bisa memberi pengguna lain kemampuan untuk mengkueri tabel dengan menggunakan pernyataan GRANT dan Anda bisa mencabut akses kueri menggunakan pernyataan REVOKE. Untuk informasi selengkapnya tentang hak istimewa di Katalog Unity, lihat Mengelola hak istimewa di Katalog Unity.

Memberikan izin select pada tabel

GRANT SELECT ON TABLE
  my_catalog.my_schema.table_name
TO
  `user@databricks.com`

Mencabut hak SELECT pada tabel

REVOKE SELECT ON TABLE
  my_catalog.my_schema.table_name
FROM
  `user@databricks.com`

Memberikan izin untuk membuat tabel atau tampilan materialisasi

GRANT CREATE { MATERIALIZED VIEW | TABLE } ON SCHEMA
  my_catalog.my_schema
TO
  { principal | user }

Menampilkan silsilah untuk rangkaian

Silsilah data untuk tabel yang ditentukan dalam alur terlihat di Catalog Explorer. UI silsilah di Katalog Explorer menampilkan tabel hulu dan hilir untuk tampilan yang dimaterialisasi atau tabel streaming dalam alur yang menggunakan fitur Unity Catalog. Untuk mempelajari selengkapnya tentang silsilah Katalog Unity, lihat Menampilkan silsilah data menggunakan Katalog Unity.

Untuk tampilan materialisasi atau tabel streaming dalam alur yang mendukung Katalog Unity, UI silsilah Katalog Explorer juga akan menautkan ke alur yang menghasilkan tampilan materialisasi atau tabel streaming jika alur dapat diakses dari ruang kerja saat ini.

Menambahkan, mengubah, atau menghapus data dalam tabel streaming

Anda dapat menggunakan pernyataan bahasa manipulasi data (DML), termasuk pernyataan sisipkan, perbarui, hapus, dan gabungkan, untuk memodifikasi tabel streaming yang diterbitkan ke Katalog Unity. Dukungan untuk kueri DML terhadap tabel streaming memungkinkan kasus penggunaan seperti memperbarui tabel untuk kepatuhan dengan Peraturan Perlindungan Data Umum (GDPR).

Nota

  • Pernyataan DML yang mengubah skema tabel tabel streaming tidak didukung. Pastikan bahwa pernyataan DML Anda tidak mencoba mengembangkan skema tabel.
  • Pernyataan DML yang memperbarui tabel streaming hanya dapat dijalankan di kluster Unity Catalog bersama atau gudang SQL menggunakan Databricks Runtime 13.3 LTS ke atas.
  • Karena streaming memerlukan sumber data khusus tambahan, jika pemrosesan Anda memerlukan streaming dari tabel streaming sumber dengan perubahan (misalnya, menurut pernyataan DML), atur bendera skipChangeCommits saat membaca tabel streaming sumber. Saat skipChangeCommits diatur, transaksi yang menghapus atau mengubah rekaman pada tabel sumber diabaikan. Jika pemrosesan Anda tidak memerlukan tabel streaming, Anda dapat menggunakan pandangan materialisasi (yang tidak memiliki batasan hanya-menambahkan) sebagai tabel target.

Berikut ini adalah contoh pernyataan DML untuk mengubah rekaman dalam tabel streaming.

Menghapus rekaman dengan ID tertentu:

DELETE FROM my_streaming_table WHERE id = 123;

Memperbarui rekaman dengan ID tertentu:

UPDATE my_streaming_table SET name = 'Jane Doe' WHERE id = 123;

Terbitkan tabel dengan filter baris dan masker kolom

Filter baris memungkinkan Anda menentukan fungsi yang berlaku sebagai filter setiap kali pemindaian tabel mengambil baris. Filter ini memastikan bahwa kueri berikutnya hanya mengembalikan baris di mana hasil evaluasi predikat filternya adalah benar.

Masker kolom memungkinkan Anda menutupi nilai kolom setiap kali pemindaian tabel mengambil baris. Kueri di masa mendatang untuk kolom tersebut mengembalikan hasil fungsi yang dievaluasi alih-alih nilai asli kolom. Untuk informasi selengkapnya tentang menggunakan filter baris dan masker kolom, lihat Filter baris dan masker kolom.

Mengelola Filter Baris dan Masker Kolom

Filter baris dan masker kolom pada tampilan materialisasi dan tabel streaming harus ditambahkan, diperbarui, atau dihilangkan melalui pernyataan CREATE OR REFRESH.

Untuk sintaks terperinci tentang menentukan tabel dengan filter baris dan masker kolom, lihat referensi bahasa Pipeline SQL dan referensi bahasa Lakeflow Spark Declarative Pipelines Python.

Perilaku

Berikut ini adalah detail penting saat menggunakan filter baris atau masker kolom dalam alur:

  • Refresh sebagai pemilik: Saat pembaruan alur me-refresh tampilan materialisasi atau tabel streaming, filter baris, dan fungsi masker kolom berjalan dengan hak pemilik alur. Ini berarti refresh tabel menggunakan konteks keamanan pengguna yang membuat alur. Fungsi yang memeriksa konteks pengguna (seperti CURRENT_USER dan IS_MEMBER) dievaluasi menggunakan konteks pengguna pemilik alur.
  • Kueri: Saat mengkueri tampilan materialisasi atau tabel streaming, fungsi yang memeriksa konteks pengguna (seperti CURRENT_USER dan IS_MEMBER) dievaluasi menggunakan konteks pengguna pemanggil. Pendekatan ini memberlakukan keamanan data dan kontrol akses khusus pengguna berdasarkan konteks pengguna saat ini.
  • Saat membuat tampilan materialisasi atas tabel sumber yang berisi filter baris dan masker kolom, refresh tampilan materialisasi selalu merupakan refresh penuh. Refresh penuh memproses ulang semua data yang tersedia di sumber dengan definisi terbaru. Proses ini memeriksa bahwa kebijakan keamanan pada tabel sumber dievaluasi dan diterapkan dengan data dan definisi yang paling terkini.

Observability

Gunakan DESCRIBE EXTENDED, INFORMATION_SCHEMA, atau Catalog Explorer untuk memeriksa filter baris dan masker kolom yang ada yang berlaku untuk tampilan materialisasi atau tabel streaming tertentu. Fungsionalitas ini memungkinkan pengguna untuk mengaudit dan meninjau langkah-langkah akses dan perlindungan data pada tampilan terwujud dan tabel streaming.