Bagikan melalui


Menerbitkan fitur ke toko online

Artikel ini menjelaskan cara menerbitkan fitur ke toko online untuk penyajian real time.

Penyimpanan Fitur Databricks mendukung penyimpanan online ini:

Penyedia penyimpanan online Terbitkan dengan Rekayasa Fitur di Katalog Unity Terbitkan dengan Penyimpanan Fitur Ruang Kerja Pencarian fitur di Penyajian Model MLflow Warisan Pencarian fitur dalam Model Serving
Azure Cosmos DB [1] X X (Klien Penyimpanan Fitur v0.5.0 ke atas) X X
Azure MySQL (Server Tunggal) X X
Server Azure SQL X

Catatan kompatibilitas Cosmos DB

Bagian ini mencakup beberapa hal penting yang perlu diingat saat menggunakan Penyimpanan Fitur Databricks dengan Cosmos DB.

Ruang kerja unity Catalog-enabled

Di Databricks Runtime 12.2 LTS ML ke bawah, penyedia toko online Cosmos DB tidak kompatibel dengan ruang kerja yang mendukung Katalog Unity. Katalog Unity dan konektor Cosmos DB Spark resmi memodifikasi katalog Spark. Saat Anda menerbitkan fitur ke Cosmos DB dari ruang kerja berkemampuan Unity Catalog pada kluster yang menjalankan Databricks Runtime 12.2 LTS ML atau di bawahnya, mungkin ada konflik tulis yang menyebabkan Penerbitan Penyimpanan Fitur ke Cosmos DB gagal.

Untuk menggunakan Cosmos DB di ruang kerja yang mendukung Katalog Unity, Anda harus menggunakan kluster yang menjalankan Databricks Runtime 13.0 ML atau lebih tinggi, atau kluster yang menjalankan Databricks Runtime 11.3 LTS ML atau lebih tinggi dengan kebijakan kluster Tidak Dibatasi atau Komputasi Bersama.

Konektor Spark

Untuk menggunakan Azure Cosmos DB, akun harus dibuat dengan API Core (SQL) dan metode konektivitas jaringan harus diatur ke Semua jaringan. Konektor OLTP Azure Cosmos DB Spark 3 yang sesuai untuk SQL API harus diinstal pada kluster. Databricks merekomendasikan agar Anda menginstal versi konektor terbaru untuk Spark 3.2 hingga konektor untuk Spark 3.3 dirilis.

Jangan membuat database atau kontainer secara manual - gunakan publish_table()

Toko online Cosmos DB menggunakan skema yang berbeda dari toko offline. Secara khusus, di toko online, kunci primer disimpan sebagai kunci gabungan di kolom _feature_store_internal__primary_keys.

Untuk memastikan bahwa Penyimpanan Fitur dapat mengakses toko online Cosmos DB, Anda harus membuat tabel di toko online dengan menggunakan publish_table(). Jangan membuat database atau kontainer secara manual di dalam Cosmos DB. publish_table() melakukan itu untuk Anda secara otomatis.

Menerbitkan fitur yang dikomputasi batch untuk penyimpanan online

Anda dapat membuat dan menjadwalkan pekerjaan Databricks untuk menerbitkan fitur yang diperbarui secara teratur. Pekerjaan ini juga dapat menyertakan kode untuk menghitung fitur yang diperbarui, atau Anda dapat membuat dan menjalankan pekerjaan yang terpisah untuk menghitung dan menerbitkan pembaruan fitur.

Untuk penyimpanan SQL, kode berikut mengasumsikan bahwa database online bernama "recommender_system" sudah ada di penyimpanan online dan cocok dengan nama penyimpanan offline. Jika tidak ada tabel bernama “customer_features” dalam database, kode ini membuatnya. Ia juga mengasumsikan bahwa fitur dihitung setiap hari dan disimpan sebagai kolom _dt yang dipartisi.

Kode berikut mengasumsikan bahwa Anda telah membuat rahasia untuk mengakses penyimpanan online ini.

Cosmos DB

Dukungan Cosmos DB tersedia di semua versi Rekayasa Fitur di klien Katalog Unity, dan klien Penyimpanan Fitur v0.5.0 ke atas.

import datetime
from databricks.feature_engineering.online_store_spec import AzureCosmosDBSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store
online_store = AzureCosmosDBSpec(
  account_uri='<account-uri>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

Penyimpanan SQL

import datetime
from databricks.feature_engineering.online_store_spec import AzureMySqlSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store
online_store = AzureMySqlSpec(
  hostname='<hostname>',
  port='<port>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

Menerbitkan fitur streaming ke penyimpanan online

Untuk terus mengalirkan fitur ke penyimpanan online, atur streaming=True.

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  streaming=True
)

Menerbitkan fitur yang dipilih ke penyimpanan online

Untuk menerbitkan hanya fitur yang dipilih ke penyimpanan online, gunakan argumen features untuk menentukan nama fitur yang diterbitkan. Kunci primer dan kunci stempel waktu selalu diterbitkan. Jika Anda tidak menentukan features argumen atau jika nilainya tidak ada, semua fitur dari tabel fitur offline diterbitkan.

Catatan

Seluruh tabel offline harus berupa tabel fitur yang valid meskipun Anda hanya menerbitkan subset fitur ke toko online. Jika tabel offline berisi tipe data yang tidak didukung, Anda tidak dapat menerbitkan subset fitur dari tabel tersebut ke penyimpanan online.

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  features=["total_purchases_30d"]
)

Menerbitkan tabel fitur ke database tertentu

Dalam spesifikasi penyimpanan online, tentukan nama database (database_name) dan nama tabel (table_name). Jika Anda tidak menentukan parameter ini, nama database offline dan nama tabel fitur yang digunakan. database_name harus sudah ada di penyimpanan online.

online_store = AzureMySqlSpec(
  hostname='<hostname>',
  port='<port>',
  database_name='<database-name>',
  table_name='<table-name>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

Mengambil alih tabel fitur online atau baris tertentu yang sudah ada

Gunakan mode='overwrite' di panggilan publish_table. Tabel online sepenuhnya diambil alih oleh data dalam tabel offline.

Catatan

Azure Cosmos DB tidak mendukung mode timpa.

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  mode='overwrite'
)

Untuk mengambil alih hanya baris tertentu, gunakan argumen filter_condition:

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

Menghapus tabel yang diterbitkan dari toko online

Dengan klien Penyimpanan Fitur v0.12.0 ke atas, Anda dapat menggunakan drop_online_table untuk menghapus tabel yang diterbitkan dari toko online. Saat Anda menghapus tabel yang diterbitkan dengan drop_online_table, tabel dihapus dari penyedia toko online Anda dan metadata toko online dihapus dari Databricks.

fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
  name='recommender_system.customer_features',
  online_store = online_store
)

Catatan

  • drop_online_table menghapus tabel yang diterbitkan dari toko online. Ini tidak menghapus tabel fitur di Databricks.
  • Sebelum menghapus tabel yang diterbitkan, Anda harus memastikan bahwa tabel tidak digunakan untuk pencarian fitur Model Serving dan tidak memiliki dependensi hilir lainnya. Penghapusan tidak dapat diubah dan dapat menyebabkan dependensi gagal.
  • Untuk memeriksa dependensi apa pun, pertimbangkan untuk memutar kunci untuk tabel yang diterbitkan yang Anda rencanakan untuk dihapus selama sehari sebelum Anda menjalankan drop_online_table.