Bagikan melalui


Bekerja dengan tabel fitur di penyimpanan fitur ruang kerja

Catatan

Dokumentasi ini mencakup penyimpanan fitur ruang kerja. Databricks merekomendasikan penggunaan Rekayasa Fitur di Unity Catalog. Penyimpanan fitur ruang kerja akan ditolak di masa mendatang.

Halaman ini menjelaskan cara membuat dan bekerja dengan tabel fitur di Penyimpanan Fitur Ruang Kerja.

Catatan

Jika ruang kerja Anda diaktifkan untuk Katalog Unity, tabel apa pun yang dikelola oleh Katalog Unity yang memiliki kunci utama secara otomatis adalah tabel fitur yang dapat Anda gunakan untuk pelatihan dan inferensi model. Semua kemampuan Katalog Unity, seperti keamanan, silsilah data, pemberian tag, dan akses lintas ruang kerja, secara otomatis tersedia untuk tabel fitur. Untuk informasi tentang bekerja dengan tabel fitur di ruang kerja yang mendukung Katalog Unity, lihat Bekerja dengan tabel fitur.

Untuk informasi tentang pelacakan silsilah fitur dan kesegaran, lihat Menemukan fitur dan melacak silsilah fitur.

Catatan

Nama tabel database dan fitur hanya dapat berisi karakter alfanumerik dan garis bawah (_).

Membuat database untuk tabel fitur

Sebelum membuat tabel fitur apa pun, Anda harus membuat database untuk menyimpannya.

%sql CREATE DATABASE IF NOT EXISTS <database-name>

Tabel fitur akan disimpan sebagai tabel Delta. Saat membuat tabel fitur dengan create_table (klien Penyimpanan Fitur v0.3.6 ke atas) atau create_feature_table (v0.3.5 ke bawah), Anda harus menentukan nama database. Misalnya, argumen ini membuat tabel Delta bernama customer_features dalam database recommender_system.

name='recommender_system.customer_features'

Ketika Anda menerbitkan tabel fitur ke penyimpanan online, tabel dan nama database default merupakan dua hal yang ditentukan ketika Anda membuat tabel; Anda dapat menentukan nama yang berbeda menggunakan metode publish_table.

UI Databricks Feature Store menunjukkan nama tabel dan database di penyimpanan online, bersama dengan metadata lainnya.

Membuat tabel fitur di Databricks Feature Store

Catatan

Anda juga dapat mendaftarkan tabel Delta yang sudah ada sebagai tabel fitur. Lihat Mendaftarkan tabel Delta yang sudah ada sebagai tabel fitur.

Langkah-langkah dasar untuk membuat tabel fitur adalah:

  1. Tulis fungsi Python untuk mengomputasi fitur. Output dari setiap fungsi harus berupa Apache Spark DataFrame dengan kunci primer yang unik. Kunci primer dapat berisi dari satu atau beberapa kolom.
  2. Buat tabel fitur dengan membuat instans FeatureStoreClient dan menggunakan create_table (v0.3.6 ke atas) atau create_feature_table (v0.3.5 ke bawah).
  3. Isilah tabel fitur menggunakan write_table.

Untuk detail tentang perintah dan parameter yang digunakan dalam contoh berikut, lihat referensi API Python Penyimpanan Fitur.

V0.3.6 ke atas

from databricks.feature_store import feature_table

def compute_customer_features(data):
  ''' Feature computation code returns a DataFrame with 'customer_id' as primary key'''
  pass

# create feature table keyed by customer_id
# take schema from DataFrame output by compute_customer_features
from databricks.feature_store import FeatureStoreClient

customer_features_df = compute_customer_features(df)

fs = FeatureStoreClient()

customer_feature_table = fs.create_table(
  name='recommender_system.customer_features',
  primary_keys='customer_id',
  schema=customer_features_df.schema,
  description='Customer features'
)

# An alternative is to use `create_table` and specify the `df` argument.
# This code automatically saves the features to the underlying Delta table.

# customer_feature_table = fs.create_table(
#  ...
#  df=customer_features_df,
#  ...
# )

# To use a composite key, pass all keys in the create_table call

# customer_feature_table = fs.create_table(
#   ...
#   primary_keys=['customer_id', 'date'],
#   ...
# )

# Use write_table to write data to the feature table
# Overwrite mode does a full refresh of the feature table

fs.write_table(
  name='recommender_system.customer_features',
  df = customer_features_df,
  mode = 'overwrite'
)

V0.3.5 ke bawah

from databricks.feature_store import feature_table

def compute_customer_features(data):
  ''' Feature computation code returns a DataFrame with 'customer_id' as primary key'''
  pass

# create feature table keyed by customer_id
# take schema from DataFrame output by compute_customer_features
from databricks.feature_store import FeatureStoreClient

customer_features_df = compute_customer_features(df)

fs = FeatureStoreClient()

customer_feature_table = fs.create_feature_table(
  name='recommender_system.customer_features',
  keys='customer_id',
  schema=customer_features_df.schema,
  description='Customer features'
)

# An alternative is to use `create_feature_table` and specify the `features_df` argument.
# This code automatically saves the features to the underlying Delta table.

# customer_feature_table = fs.create_feature_table(
#  ...
#  features_df=customer_features_df,
#  ...
# )

# To use a composite key, pass all keys in the create_feature_table call

# customer_feature_table = fs.create_feature_table(
#   ...
#   keys=['customer_id', 'date'],
#   ...
# )

# Use write_table to write data to the feature table
# Overwrite mode does a full refresh of the feature table

fs.write_table(
  name='recommender_system.customer_features',
  df = customer_features_df,
  mode = 'overwrite'
)from databricks.feature_store import feature_table

def compute_customer_features(data):
  ''' Feature computation code returns a DataFrame with 'customer_id' as primary key'''
  pass

# create feature table keyed by customer_id
# take schema from DataFrame output by compute_customer_features
from databricks.feature_store import FeatureStoreClient

customer_features_df = compute_customer_features(df)

fs = FeatureStoreClient()

customer_feature_table = fs.create_feature_table(
  name='recommender_system.customer_features',
  keys='customer_id',
  schema=customer_features_df.schema,
  description='Customer features'
)

# An alternative is to use `create_feature_table` and specify the `features_df` argument.
# This code automatically saves the features to the underlying Delta table.

# customer_feature_table = fs.create_feature_table(
#  ...
#  features_df=customer_features_df,
#  ...
# )

# To use a composite key, pass all keys in the create_feature_table call

# customer_feature_table = fs.create_feature_table(
#   ...
#   keys=['customer_id', 'date'],
#   ...
# )

# Use write_table to write data to the feature table
# Overwrite mode does a full refresh of the feature table

fs.write_table(
  name='recommender_system.customer_features',
  df = customer_features_df,
  mode = 'overwrite'
)

Mendaftarkan tabel Delta yang sudah ada sebagai tabel fitur

Dengan v0.3.8 ke atas, Anda dapat mendaftarkan tabel Delta yang ada sebagai tabel fitur. Tabel Delta harus ada di metastore.

Catatan

Untuk memperbarui tabel fitur terdaftar, Anda harus menggunakan API Python Feature Store.

fs.register_table(
  delta_table='recommender.customer_features',
  primary_keys='customer_id',
  description='Customer features'
)

Mengontrol akses ke tabel fitur

Lihat Mengontrol akses ke tabel fitur.

Memperbarui tabel fitur

Anda dapat memperbarui tabel fitur dengan menambahkan fitur baru atau dengan mengubah baris tertentu berdasarkan kunci primer.

Metadata tabel fitur berikut tidak dapat diperbarui:

  • Kunci utama
  • Kunci partisi
  • Nama atau jenis fitur yang ada

Menambahkan fitur baru ke tabel fitur yang sudah ada

Anda dapat menambahkan fitur baru ke tabel fitur yang sudah ada dengan salah satu dari dua cara:

  • Perbarui fungsi komputasi fitur yang sudah ada dan jalankan write_table dengan DataFrame yang ditampilkan. Ini akan memperbarui skema tabel fitur dan menggabungkan nilai fitur baru berdasarkan kunci primer.
  • Buat fungsi komputasi fitur baru untuk menghitung nilai fitur baru. DataFrame yang ditampilkan oleh fungsi komputasi baru ini harus berisi kunci primer tabel fitur dan kunci partisi (jika ditentukan). Jalankan write_table dengan DataFrame untuk menulis fitur baru ke tabel fitur yang sudah ada, dengan menggunakan kunci primer yang sama.

Memperbarui baris tertentu saja dalam tabel fitur

Gunakan mode = "merge" di write_table. Baris yang kunci primernya tidak ada di DataFrame yang dikirimkan dalam panggilan write_table tetap tidak berubah.

fs.write_table(
  name='recommender.customer_features',
  df = customer_features_df,
  mode = 'merge'
)

Menjadwalkan pekerjaan untuk memperbarui tabel fitur

Untuk memastikan bahwa fitur dalam tabel fitur selalu memiliki nilai terbaru, Databricks menyarankan agar Anda membuat pekerjaan yang menjalankan notebook untuk memperbarui tabel fitur Anda secara berkala, seperti setiap hari. Jika Anda sudah membuat pekerjaan yang tidak terjadwal, Anda dapat mengonversinya menjadi pekerjaan terjadwal untuk memastikan nilai fitur selalu diperbarui. Lihat Menjadwalkan dan mengatur alur kerja.

Kode untuk memperbarui tabel fitur menggunakan mode='merge', seperti yang ditunjukkan dalam contoh berikut.

fs = FeatureStoreClient()

customer_features_df = compute_customer_features(data)

fs.write_table(
  df=customer_features_df,
  name='recommender_system.customer_features',
  mode='merge'
)

Menyimpan nilai fitur harian sebelumnya

Tentukan tabel fitur dengan kunci primer komposit. Sertakan tanggal dalam kunci primer. Misalnya, untuk tabel fitur store_purchases, Anda dapat menggunakan kunci primer komposit (date, user_id) dan kunci partisi date untuk pembacaan yang efisien.

fs.create_table(
  name='recommender_system.customer_features',
  primary_keys=['date', 'customer_id'],
  partition_columns=['date'],
  schema=customer_features_df.schema,
  description='Customer features'
)

Anda kemudian dapat membuat kode untuk membaca dari tabel fitur yang memfilter date ke periode waktu yang dibutuhkan.

Anda juga dapat membuat tabel fitur rangkaian waktu dengan menentukan date kolom sebagai kunci tanda waktu menggunakan timestamp_keys argumen .

fs.create_table(
  name='recommender_system.customer_features',
  primary_keys=['date', 'customer_id'],
  timestamp_keys=['date'],
  schema=customer_features_df.schema,
  description='Customer timeseries features'
)

Ini memungkinkan pencarian point-in-time saat Anda menggunakan create_training_set atau score_batch. Sistem melakukan gabungan tanda waktu per jam, menggunakan yang timestamp_lookup_key Anda tentukan.

Untuk menjaga tabel fitur tetap diperbarui, siapkan pekerjaan yang dijadwalkan secara berkala untuk menulis fitur, atau alirkan nilai fitur baru ke dalam tabel fitur.

Membuat alur komputasi fitur streaming untuk memperbarui fitur

Untuk membuat alur komputasi fitur streaming, teruskan streaming DataFrame sebagai argumen ke write_table. Metode ini mengembalikan objek StreamingQuery.

def compute_additional_customer_features(data):
  ''' Returns Streaming DataFrame
  '''
  pass  # not shown

customer_transactions = spark.readStream.load("dbfs:/events/customer_transactions")
stream_df = compute_additional_customer_features(customer_transactions)

fs.write_table(
  df=stream_df,
  name='recommender_system.customer_features',
  mode='merge'
)

Membaca dari tabel fitur

Gunakan read_table untuk membaca nilai fitur.

fs = feature_store.FeatureStoreClient()
customer_features_df = fs.read_table(
  name='recommender.customer_features',
)

Cari dan telusuri tabel fitur

Gunakan UI Penyimpanan Fitur untuk mencari atau menelusuri tabel fitur.

  1. Di bar samping, pilih Pembelajaran Mesin > Penyimpanan Fitur untuk menampilkan UI Penyimpanan Fitur.

  2. Di kotak pencarian, masukkan semua atau sebagian nama tabel fitur, fitur, atau sumber data yang digunakan untuk komputasi fitur. Anda juga dapat memasukkan semua atau sebagian kunci atau nilai tag. Teks pencarian tidak peka huruf besar/kecil.

    Contoh pencarian fitur

Mendapatkan metadata tabel fitur

API untuk mendapat metadata tabel fitur tergantung dari versi runtime Databricks yang Anda gunakan. Dengan v0.3.6 ke atas, gunakan get_table. Dengan v0.3.5 ke bawah, gunakan get_feature_table.

# this example works with v0.3.6 and above
# for v0.3.5, use `get_feature_table`
from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()
fs.get_table("feature_store_example.user_feature_table")

Bekerja dengan tag tabel fitur

Tag adalah pasangan nilai kunci yang dapat Anda buat dan gunakan untuk mencari tabel fitur. Anda dapat membuat, mengedit, dan menghapus tag menggunakan UI Penyimpanan Fitur atau API Python Penyimpanan Fitur.

Bekerja dengan tag tabel fitur di UI

Gunakan UI Penyimpanan Fitur untuk mencari atau menelusuri tabel fitur. Untuk mengakses UI, di bar samping, pilih Pembelajaran Mesin > Feature Store.

Menambahkan tag menggunakan UI Penyimpanan Fitur

  1. Klik Ikon tag jika belum dibuka. Tabel tag muncul.

    tabel tag

  2. Klik di bidang Nama dan Nilai dan masukkan kunci dan nilai untuk tag Anda.

  3. Klik Tambahkan.

Mengedit atau menghapus tag menggunakan UI Penyimpanan Fitur

Untuk mengedit atau menghapus tag yang sudah ada, gunakan ikon di kolom Tindakan.

tindakan tag

Bekerja dengan tab tabel fitur menggunakan API Python Penyimpanan Fitur

Pada kluster yang menjalankan v0.4.1 ke atas, Anda dapat membuat, mengedit, dan menghapus tag menggunakan API Python Penyimpanan Fitur.

Persyaratan

Klien Penyimpanan Fitur v0.4.1 ke atas

Membuat tabel fitur dengan tag menggunakan API Python Penyimpanan Fitur

from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()

customer_feature_table = fs.create_table(
  ...
  tags={"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2", ...},
  ...
)

Menambahkan, memperbarui, dan menghapus tag menggunakan API Python Penyimpanan Fitur

from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()

# Upsert a tag
fs.set_feature_table_tag(table_name="my_table", key="quality", value="gold")

# Delete a tag
fs.delete_feature_table_tag(table_name="my_table", key="quality")

Memperbarui sumber data untuk tabel fitur

Penyimpanan fitur secara otomatis melacak sumber data yang digunakan untuk komputasi fitur. Anda juga dapat memperbarui sumber data secara manual menggunakan Penyimpanan Fitur Python API.

Persyaratan

Klien Penyimpanan Fitur v0.5.0 ke atas

Menambahkan sumber data menggunakan Penyimpanan Fitur Python API

Di bawah ini adalah beberapa contoh perintah. Untuk detailnya, lihat dokumentasi API.

from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()

# Use `source_type="table"` to add a table in the metastore as data source.
fs.add_data_sources(feature_table_name="clicks", data_sources="user_info.clicks", source_type="table")

# Use `source_type="path"` to add a data source in path format.
fs.add_data_sources(feature_table_name="user_metrics", data_sources="dbfs:/FileStore/user_metrics.json", source_type="path")

# Use `source_type="custom"` if the source is not a table or a path.
fs.add_data_sources(feature_table_name="user_metrics", data_sources="user_metrics.txt", source_type="custom")

Menghapus sumber data menggunakan Penyimpanan Fitur API Python

Untuk detailnya, lihat dokumentasi API.

Catatan

Perintah berikut menghapus semua jenis sumber data ("tabel", "jalur", dan "kustom") yang cocok dengan nama sumber.

from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()
fs.delete_data_sources(feature_table_name="clicks", sources_names="user_info.clicks")

Hapus tabel fitur

Anda dapat menghapus tabel fitur menggunakan UI Penyimpanan Fitur atau API Python Penyimpanan Fitur.

Catatan

  • Menghapus tabel fitur dapat menyebabkan kegagalan tak terduga di produsen hulu dan konsumen hilir (model, titik akhir, dan pekerjaan terjadwal). Anda harus menghapus penyimpanan online yang diterbitkan dengan penyedia cloud Anda.
  • Saat Anda menghapus tabel fitur menggunakan API, tabel Delta yang mendasarinya juga akan dihapus. Saat Anda menghapus tabel fitur dari antarmuka pengguna, Anda harus menghapus tabel Delta yang mendasarinya secara terpisah.

Menghapus tabel fitur menggunakan UI

  1. Pada halaman tabel fitur, klik Tombol Bawah di sebelah kanan nama tabel fitur dan pilih Hapus. Jika Anda tidak memiliki izin CAN MANAGE untuk tabel fitur, Anda tidak akan melihat opsi ini.

    Pilih hapus dari menu drop-down

  2. Dalam dialog Hapus Tabel Fitur, klik Hapus untuk mengonfirmasi.

  3. Jika Anda juga ingin menghilangkan tabel Delta yang mendasarinya, jalankan perintah berikut ini di buku catatan.

    %sql DROP TABLE IF EXISTS <feature-table-name>;
    

Menghapus tabel fitur menggunakan API Python Penyimpanan Fitur

Dengan klien Penyimpanan Fitur v0.4.1 ke atas, Anda dapat menggunakan drop_table untuk menghapus tabel fitur. Saat Anda menghapus tabel dengan drop_table, tabel Delta yang mendasarinya juga akan dihapus.

fs.drop_table(
  name='recommender_system.customer_features'
)