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:
- 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.
- Buat tabel fitur dengan membuat instans
FeatureStoreClient
dan menggunakancreate_table
(v0.3.6 ke atas) ataucreate_feature_table
(v0.3.5 ke bawah). - 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.
Di bar samping, pilih Pembelajaran Mesin > Penyimpanan Fitur untuk menampilkan UI Penyimpanan Fitur.
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.
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
Klik jika belum dibuka. Tabel tag muncul.
Klik di bidang Nama dan Nilai dan masukkan kunci dan nilai untuk tag Anda.
Klik Tambahkan.
Mengedit atau menghapus tag menggunakan UI Penyimpanan Fitur
Untuk mengedit atau menghapus tag yang sudah ada, gunakan ikon di kolom Tindakan.
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
Pada halaman tabel fitur, klik 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.
Dalam dialog Hapus Tabel Fitur, klik Hapus untuk mengonfirmasi.
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'
)