Bagikan melalui


Menggunakan tabel online untuk penyajian fitur real-time

Penting

Tabel Online berada dalam pratinjau publik. Selama pratinjau, menyerap data ke dalam Tabel Online menggunakan DBA Tanpa Server SQL. Harga akhir untuk Tabel Online akan tersedia pada tanggal mendatang.

Pratinjau Tabel Online tersedia di wilayah berikut: westus, , eastus, eastus2northeurope, westeurope.

Tabel online adalah salinan baca-saja dari Tabel Delta yang disimpan dalam format berorientasi baris yang dioptimalkan untuk akses online. Tabel online adalah tabel tanpa server sepenuhnya yang menskalakan kapasitas throughput secara otomatis dengan beban permintaan dan memberikan latensi rendah dan akses throughput tinggi ke data skala apa pun. Tabel online dirancang untuk bekerja dengan aplikasi Databricks Model Serving, Feature Serving, dan retrieval-augmented generation (RAG) tempat mereka digunakan untuk pencarian data cepat.

Anda juga dapat menggunakan tabel online dalam kueri menggunakan Federasi Lakehouse. Saat menggunakan Federasi Lakehouse, Anda harus menggunakan gudang SQL Tanpa Server untuk mengakses tabel online. Hanya operasi baca (SELECT) yang didukung. Kemampuan ini ditujukan hanya untuk tujuan interaktif atau penelusuran kesalahan dan tidak boleh digunakan untuk beban kerja penting produksi atau misi.

Membuat tabel online menggunakan UI Databricks adalah proses satu langkah. Cukup pilih tabel Delta di Catalog Explorer dan pilih Buat tabel online. Anda juga dapat menggunakan REST API atau Databricks SDK untuk membuat dan mengelola tabel online. Lihat Bekerja dengan tabel online menggunakan API.

Persyaratan

  • Ruang kerja harus diaktifkan untuk Katalog Unity. Ikuti dokumentasi untuk membuat Metastore Katalog Unity, mengaktifkannya di ruang kerja, dan membuat Katalog.
  • Model harus terdaftar di Unity Catalog untuk mengakses tabel online.

Bekerja dengan tabel online menggunakan UI

Bagian ini menjelaskan cara membuat dan menghapus tabel online, dan cara memeriksa status dan memicu pembaruan tabel online.

Membuat tabel online menggunakan UI

Anda membuat tabel online menggunakan Catalog Explorer. Untuk informasi tentang izin yang diperlukan, lihat Izin pengguna.

  1. Untuk membuat tabel online, tabel Delta sumber harus memiliki kunci primer. Jika tabel Delta yang ingin Anda gunakan tidak memiliki kunci utama, buat dengan mengikuti instruksi berikut: Gunakan tabel Delta yang sudah ada di Katalog Unity sebagai tabel fitur.

  2. Di Catalog Explorer, navigasikan ke tabel sumber yang ingin Anda sinkronkan ke tabel online. Dari menu Buat, pilih Tabel online.

    pilih buat tabel online

  3. Gunakan pemilih dalam dialog untuk mengonfigurasi tabel online.

    mengonfigurasi dialog tabel online

    Nama: Nama yang akan digunakan untuk tabel online di Katalog Unity.

    Kunci Primer: Kolom dalam tabel sumber untuk digunakan sebagai kunci primer dalam tabel online.

    Kunci Timeseries: (Opsional). Kolom dalam tabel sumber untuk digunakan sebagai kunci timeseries. Jika ditentukan, tabel online hanya menyertakan baris dengan nilai kunci timeseries terbaru untuk setiap kunci utama.

    Mode sinkronisasi: Menentukan bagaimana alur sinkronisasi memperbarui tabel online. Pilih salah satu Rekam Jepret, Dipicu, atau Berkelanjutan.

    Kebijakan Deskripsi
    Snapshot Alur berjalan sekali untuk mengambil rekam jepret tabel sumber dan menyalinnya ke tabel online. Perubahan berikutnya pada tabel sumber secara otomatis tercermin dalam tabel online dengan mengambil rekam jepret baru sumber dan membuat salinan baru. Konten tabel online diperbarui secara atomik.
    Dipicu Alur berjalan sekali untuk membuat salinan rekam jepret awal tabel sumber dalam tabel online. Tidak seperti mode sinkronisasi Snapshot, ketika tabel online di-refresh, hanya perubahan sejak eksekusi alur terakhir diambil dan diterapkan ke tabel online. Refresh inkremental dapat dipicu secara manual atau dipicu secara otomatis sesuai dengan jadwal.
    Berkelanjutan Alur berjalan terus menerus. Perubahan berikutnya pada tabel sumber diterapkan secara bertahap ke tabel online dalam mode streaming real time. Tidak diperlukan refresh manual.

Catatan

Untuk mendukung mode sinkronisasi Terpicu atau Berkelanjutan , tabel sumber harus mengaktifkan Ubah umpan data.

  1. Setelah selesai, klik Konfirmasi. Halaman tabel online muncul.
  2. Tabel online baru dibuat di bawah katalog, skema, dan nama yang ditentukan dalam dialog pembuatan. Di Catalog Explorer, tabel online ditunjukkan oleh ikon tabel online.

Mendapatkan pembaruan status dan pemicu menggunakan UI

Untuk memeriksa status tabel online, klik nama tabel di Katalog untuk membukanya. Halaman tabel online muncul dengan tab Gambaran Umum terbuka. Bagian Penyerapan Data memperlihatkan status pembaruan terbaru. Untuk memicu pembaruan, klik Sinkronkan sekarang. Bagian Penyerapan Data juga menyertakan tautan ke alur Tabel Langsung Delta yang memperbarui tabel.

tampilan halaman tabel online dalam katalog

Menghapus tabel online menggunakan UI

Dari halaman tabel online, pilih Hapus dari menu kebabMenu kebab.

Bekerja dengan tabel online menggunakan API

Anda juga dapat menggunakan Databricks SDK atau REST API untuk membuat dan mengelola tabel online.

Untuk informasi referensi, lihat dokumentasi referensi untuk Databricks SDK untuk Python atau REST API.

Persyaratan

Databricks SDK versi 0.20 atau lebih tinggi.

Membuat tabel online menggunakan API

Databricks SDK - Python

from pprint import pprint
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import *

w = WorkspaceClient(host='https://xxx.databricks.com', token='xxx')

# Create an online table
spec = OnlineTableSpec(
  primary_key_columns=["pk_col"],
  source_table_full_name="main.default.source_table",
  run_triggered=OnlineTableSpecTriggeredSchedulingPolicy.from_dict({'triggered': 'true'})
)

w.online_tables.create(name='main.default.my_online_table', spec=spec)

REST API

curl --request POST "https://xxx.databricks.com/api/2.0/online-tables" \
--header "Authorization: Bearer xxx" \
--data '{
    "name": "main.default.my_online_table",
    "spec": {
        "run_triggered": {},
        "source_table_full_name": "main.default.source_table",
        "primary_key_columns": ["a"]
    }
  }'

Tabel online secara otomatis mulai disinkronkan setelah dibuat.

Mendapatkan status dan memicu refresh menggunakan API

Anda dapat melihat status dan spesifikasi tabel online dengan mengikuti contoh di bawah ini. Jika tabel online Anda tidak berkelanjutan dan Anda ingin memicu refresh manual datanya, Anda dapat menggunakan API alur untuk melakukannya.

Gunakan ID alur yang terkait dengan tabel online dalam spesifikasi tabel online dan mulai pembaruan baru pada alur untuk memicu refresh. Ini setara dengan mengklik Sinkronkan sekarang di UI tabel online di Catalog Explorer.

Databricks SDK - Python

pprint(w.online_tables.get('main.default.my_online_table'))

# Sample response
OnlineTable(name='main.default.my_online_table',
    spec=OnlineTableSpec(perform_full_copy=None,
        pipeline_id='some-pipeline-id',
        primary_key_columns=['pk_col'],
        run_continuously=None,
        run_triggered={},
        source_table_full_name='main.default.source_table',
        timeseries_key=None),
    status=OnlineTableStatus(continuous_update_status=None,
        detailed_state=OnlineTableState.PROVISIONING,
        failed_status=None,
        message='Online Table creation is '
            'pending. Check latest status in '
            'Delta Live Tables: '
            'https://xxx.databricks.com/pipelines/some-pipeline-id',
        provisioning_status=None,
        triggered_update_status=None))

# Trigger an online table refresh by calling the pipeline API. To discard all existing data
# in the online table before refreshing, set "full_refresh" to "True". This is useful if your
# online table sync is stuck due to, for example, the source table being deleted and recreated
# with the same name while the sync was running.
w.pipelines.start_update(pipeline_id='some-pipeline-id', full_refresh=True)

REST API

curl --request GET \
  "https://xxx.databricks.com/api/2.0/online-tables/main.default.my_online_table" \
  --header "Authorization: Bearer xxx"

# Sample response
{
  "name": "main.default.my_online_table",
  "spec": {
    "run_triggered": {},
    "source_table_full_name": "main.default.source_table",
    "primary_key_columns": ["pk_col"],
    "pipeline_id": "some-pipeline-id"
  },
  "status": {
    "detailed_state": "PROVISIONING",
    "message": "Online Table creation is pending. Check latest status in Delta Live Tables: https://xxx.databricks.com#joblist/pipelines/some-pipeline-id"
  }
}

# Trigger an online table refresh by calling the pipeline API. To discard all existing data
# in the online table before refreshing, set "full_refresh" to "True". This is useful if your
# online table sync is stuck due to, for example, the source table being deleted and recreated
# with the same name while the sync was running.
curl --request POST "https://xxx.databricks.com/api/2.0/pipelines/some-pipeline-id/updates" \
  --header "Authorization: Bearer xxx" \
  --data '{
    "full_refresh": true
  }'

Menghapus tabel online menggunakan API

Databricks SDK - Python

w.online_tables.delete('main.default.my_online_table')

REST API

curl --request DELETE \
  "https://xxx.databricks.com/api/2.0/online-tables/main.default.my_online_table" \
  --header "Authorization: Bearer xxx"

Menghapus tabel online menghentikan sinkronisasi data yang sedang berlangsung dan merilis semua sumber dayanya.

Menyajikan data tabel online menggunakan fitur yang melayani titik akhir

Untuk model dan aplikasi yang dihosting di luar Databricks, Anda dapat membuat fitur yang melayani titik akhir untuk menyajikan fitur dari tabel online. Titik akhir membuat fitur tersedia pada latensi rendah menggunakan REST API.

  1. Buat spesifikasi fitur.

    Saat membuat spesifikasi fitur, Anda menentukan tabel Delta sumber. Ini memungkinkan spesifikasi fitur untuk digunakan dalam skenario offline dan online. Untuk pencarian online, titik akhir penyajian secara otomatis menggunakan tabel online untuk melakukan pencarian fitur latensi rendah.

    Tabel Delta sumber dan tabel online harus menggunakan kunci primer yang sama.

    Spesifikasi fitur dapat dilihat di tab Fungsi di Catalog Explorer.

    from databricks.feature_engineering import FeatureEngineeringClient, FeatureLookup
    
    fe = FeatureEngineeringClient()
    fe.create_feature_spec(
      name="catalog.default.user_preferences_spec",
      features=[
        FeatureLookup(
          table_name="user_preferences",
          lookup_key="user_id"
        )
      ]
    )
    
  2. Buat fitur yang melayani titik akhir.

    Langkah ini mengasumsikan bahwa Anda telah membuat tabel online bernama user_preferences_online_table yang menyinkronkan data dari tabel user_preferencesDelta . Gunakan spesifikasi fitur untuk membuat titik akhir penyajian fitur. Titik akhir membuat data tersedia melalui REST API menggunakan tabel online terkait.

    Catatan

    Pengguna yang melakukan operasi ini harus menjadi pemilik tabel offline dan tabel online.

    Databricks SDK - Python

    from databricks.sdk import WorkspaceClient
    from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput
    
    workspace = WorkspaceClient()
    
    # Create endpoint
    endpoint_name = "fse-location"
    
    workspace.serving_endpoints.create_and_wait(
      name=endpoint_name,
      config=EndpointCoreConfigInput(
        served_entities=[
          ServedEntityInput(
            entity_name=feature_spec_name,
            scale_to_zero_enabled=True,
            workload_size="Small"
          )
        ]
      )
    )
    

    Python API

    fe.create_feature_serving_endpoint(
      name="user-preferences",
      config=EndpointCoreConfig(
        served_entities=ServedEntity(
          feature_spec_name="catalog.default.user_preferences_spec",
          workload_size="Small",
          scale_to_zero_enabled=True
        )
      )
    )
    
  3. Dapatkan data dari titik akhir penyajian fitur.

    Untuk mengakses titik akhir API, kirim permintaan HTTP GET ke URL titik akhir. Contoh menunjukkan cara melakukan ini menggunakan API Python. Untuk bahasa dan alat lain, lihat Penyajian Fitur.

    # Set up credentials
    export DATABRICKS_TOKEN=...
    
    url = "https://{workspace_url}/serving-endpoints/user-preferences/invocations"
    
    headers = {'Authorization': f'Bearer {DATABRICKS_TOKEN}', 'Content-Type': 'application/json'}
    
    data = {
      "dataframe_records": [{"user_id": user_id}]
    }
    data_json = json.dumps(data, allow_nan=True)
    
    response = requests.request(method='POST', headers=headers, url=url, data=data_json)
    if response.status_code != 200:
      raise Exception(f'Request failed with status {response.status_code}, {response.text}')
    
    print(response.json()['outputs'][0]['hotel_preference'])
    

Menggunakan tabel online dengan aplikasi RAG

Aplikasi RAG adalah kasus penggunaan umum untuk tabel online. Anda membuat tabel online untuk data terstruktur yang dibutuhkan aplikasi RAG dan menghostingnya di titik akhir penyajian fitur. Aplikasi RAG menggunakan fitur yang melayani titik akhir untuk mencari data yang relevan dari tabel online.

Langkah-langkah umumnya adalah sebagai berikut:

  1. Buat fitur yang melayani titik akhir.
  2. Buat LangChainTool yang menggunakan titik akhir untuk mencari data yang relevan.
  3. Gunakan alat di agen LangChain untuk mengambil data yang relevan.
  4. Buat model yang melayani titik akhir untuk menghosting aplikasi LangChain.

Untuk instruksi langkah demi langkah, lihat contoh buku catatan berikut ini.

Contoh buku catatan

Buku catatan berikut ini menggambarkan cara menerbitkan fitur ke tabel online untuk penyajian real time dan pencarian fitur otomatis.

Buku catatan demo tabel online

Dapatkan buku catatan

Buku catatan berikut ini menggambarkan cara menggunakan tabel online Databricks dan fitur yang melayani titik akhir untuk mengambil aplikasi pembuatan tertambah (RAG).

Tabel online dengan buku catatan demo aplikasi RAG

Dapatkan buku catatan

Menggunakan tabel online dengan Databricks Model Serving

Anda dapat menggunakan tabel online untuk mencari fitur untuk Databricks Model Serving. Saat Anda menyinkronkan tabel fitur ke tabel online, model yang dilatih menggunakan fitur dari tabel fitur tersebut secara otomatis mencari nilai fitur dari tabel online selama inferensi. Tidak diperlukan konfigurasi tambahan.

  1. FeatureLookup Gunakan untuk melatih model.

    Untuk pelatihan model, gunakan fitur dari tabel fitur offline dalam set pelatihan model, seperti yang ditunjukkan dalam contoh berikut:

    training_set = fe.create_training_set(
      df=id_rt_feature_labels,
      label='quality',
      feature_lookups=[
          FeatureLookup(
              table_name="user_preferences",
              lookup_key="user_id"
          )
      ],
      exclude_columns=['user_id'],
    )
    
  2. Layani model dengan Databricks Model Serving. Model secara otomatis mencari fitur dari tabel online. Lihat Pencarian fitur otomatis dengan model MLflow di Databricks untuk detailnya.

Izin pengguna

Anda harus memiliki izin berikut untuk membuat tabel online:

  • SELECT hak istimewa pada tabel sumber.
  • USE_CATALOG hak istimewa pada katalog tujuan.
  • USE_SCHEMA hak CREATE_TABLE istimewa pada skema tujuan.

Untuk mengelola alur sinkronisasi data tabel online, Anda harus menjadi pemilik tabel online atau diberikan hak istimewa REFRESH pada tabel online. Pengguna yang tidak memiliki hak istimewa USE_CATALOG dan USE_SCHEMA pada katalog tidak akan melihat tabel online di Catalog Explorer.

Metastore Unity Catalog harus memiliki Privilege Model Versi 1.0.

Model izin titik akhir

Perwakilan layanan sistem unik secara otomatis dibuat untuk penyajian fitur atau model yang melayani titik akhir dengan izin terbatas yang diperlukan untuk mengkueri data dan menjalankan fungsi. Perwakilan layanan ini memungkinkan titik akhir untuk mengakses data dan sumber daya fungsi secara independen dari pengguna yang membuat sumber daya dan memastikan bahwa titik akhir dapat terus berfungsi jika pembuat meninggalkan ruang kerja.

Masa pakai perwakilan layanan sistem ini adalah masa pakai titik akhir. Log audit dapat menunjukkan catatan yang dihasilkan sistem untuk pemilik katalog Katalog Unity yang memberikan hak istimewa yang diperlukan kepada perwakilan layanan sistem ini.

Batasan

  • Hanya satu tabel online yang didukung per tabel sumber.
  • Tabel online dan tabel sumbernya dapat memiliki paling banyak 1000 kolom.
  • Kolom tipe data ARRAY, MAP, atau STRUCT tidak dapat digunakan sebagai kunci utama dalam tabel online.
  • Jika kolom digunakan sebagai kunci utama dalam tabel online, semua baris dalam tabel sumber di mana kolom berisi nilai null diabaikan.
  • Tabel asing, sistem, dan internal tidak didukung sebagai tabel sumber.
  • Tabel sumber tanpa umpan data perubahan Delta diaktifkan hanya mendukung mode sinkronisasi Rekam jepret .
  • Tabel Berbagi Delta hanya didukung dalam mode sinkronisasi Snapshot .
  • Nama katalog, skema, dan tabel tabel tabel online hanya boleh berisi karakter alfanumerik dan garis bawah, dan tidak boleh dimulai dengan angka. Tanda hubung (-) tidak diperbolehkan.
  • Kolom jenis String dibatasi hingga panjang 64KB.
  • Panjang nama kolom dibatasi hingga 64 karakter.
  • Ukuran maksimum baris adalah 2MB.
  • Ukuran maksimum tabel online selama pratinjau publik yang terjaga adalah 200GB data pengguna yang tidak dikompresi.
  • Ukuran gabungan semua tabel online dalam metastore Unity Catalog selama pratinjau publik yang terjaga adalah 1TB data pengguna yang tidak dikompresi.
  • Kueri maksimum per detik (QPS) adalah 200. Batas ini dapat ditingkatkan menjadi 25.000 atau lebih. Hubungi tim akun Databricks Anda untuk meningkatkan batas.

Pemecahan Masalah

Saya tidak melihat opsi Buat tabel online

Penyebabnya biasanya adalah tabel yang Anda coba sinkronkan dari (tabel sumber) bukan jenis yang didukung. Pastikan Jenis Yang Dapat Diamankan tabel sumber (diperlihatkan di tab Detail Penjelajah Katalog) adalah salah satu opsi yang didukung di bawah ini:

  • TABLE_EXTERNAL
  • TABLE_DELTA
  • TABLE_DELTA_EXTERNAL
  • TABLE_DELTASHARING
  • TABLE_DELTASHARING_MUTABLE
  • TABLE_STREAMING_LIVE_TABLE
  • TABLE_STANDARD
  • TABLE_FEATURE_STORE
  • TABLE_FEATURE_STORE_EXTERNAL
  • TABLE_VIEW
  • TABLE_VIEW_DELTASHARING
  • TABLE_MATERIALIZED_VIEW

Saya tidak dapat memilih mode sinkronisasi Terpicu atau Berkelanjutan saat membuat tabel online

Ini terjadi jika tabel sumber tidak mengaktifkan umpan data perubahan Delta atau jika itu adalah Tampilan atau Tampilan Terwujud. Untuk menggunakan mode sinkronisasi inkremental , aktifkan ubah umpan data pada tabel sumber, atau gunakan tabel non-tampilan.

Pembaruan tabel online gagal atau status menunjukkan offline

Untuk mulai memecahkan masalah kesalahan ini, klik id alur yang muncul di tab Gambaran Umum tabel online di Catalog Explorer.

kegagalan alur tabel online

Pada halaman antarmuka pengguna alur yang muncul, klik entri yang bertuliskan "Gagal mengatasi aliran '__online_table".

pesan kesalahan alur tabel online

Popup muncul dengan detail di bagian Detail kesalahan.

detail kesalahan tabel online

Penyebab umum kesalahan termasuk yang berikut ini:

  • Tabel sumber dihapus, atau dihapus dan dibuat ulang dengan nama yang sama, saat tabel online sedang disinkronkan. Ini sangat umum dengan tabel online berkelanjutan, karena terus disinkronkan.

  • Tabel sumber tidak dapat diakses melalui Komputasi Tanpa Server karena pengaturan firewall. Dalam situasi ini, bagian Detail kesalahan mungkin menampilkan pesan kesalahan "Gagal memulai layanan DLT pada kluster xxx...".

  • Ukuran agregat tabel online melebihi batas seluruh metastore 1 TiB (ukuran tidak dikompresi). Batas 1 TiB mengacu pada ukuran yang tidak dikompresi setelah memperluas tabel Delta dalam format berorientasi baris. Ukuran tabel dalam format baris bisa jauh lebih besar dari ukuran tabel Delta yang diperlihatkan di Catalog Explorer, yang mengacu pada ukuran tabel yang dikompresi dalam format berorientasi kolom. Perbedaannya bisa sebesar 100x, tergantung pada konten tabel.

    Untuk memperkirakan ukuran tabel Delta yang tidak dikompresi dan diperluas baris, gunakan kueri berikut dari Gudang SQL Tanpa Server. Kueri mengembalikan perkiraan ukuran tabel yang diperluas dalam byte. Berhasil menjalankan kueri ini juga mengonfirmasi bahwa Komputasi Tanpa Server dapat mengakses tabel sumber.

    SELECT sum(length(to_csv(struct(*)))) FROM `source_table`;