Çalışma alanı özellik deposunda özellik tablolarıyla çalışma
Not
Bu belgeler çalışma alanı özellik depolarını kapsar. Databricks, Unity Kataloğu'nda Özellik Mühendisliği'nin kullanılmasını önerir. Çalışma alanı özellik deposu gelecekte kullanım dışı bırakılacaktır.
Bu sayfada, Çalışma Alanı Özellik Deposu'nda özellik tablolarının nasıl oluşturulacağı ve bunlarla nasıl çalışıldığı açıklanır.
Not
Çalışma alanınız Unity Kataloğu için etkinleştirildiyse, birincil anahtarı olan Unity Kataloğu tarafından yönetilen tüm tablolar otomatik olarak model eğitimi ve çıkarım için kullanabileceğiniz bir özellik tablosudur. Güvenlik, köken, etiketleme ve çalışma alanları arası erişim gibi tüm Unity Kataloğu özellikleri özellik tablosunda otomatik olarak kullanılabilir. Unity Kataloğu etkin çalışma alanında özellik tablolarıyla çalışma hakkında bilgi için bkz . Özellik tablolarıyla çalışma.
Özellik kökenini ve güncelliğini izleme hakkında bilgi için bkz . Özellikleri bulma ve özellik kökenini izleme.
Not
Veritabanı ve özellik tablosu adları yalnızca alfasayısal karakterler ve alt çizgi (_) içerebilir.
Özellik tabloları için veritabanı oluşturma
Özellik tablolarını oluşturmadan önce, bunları depolamak için bir veritabanı oluşturmanız gerekir.
%sql CREATE DATABASE IF NOT EXISTS <database-name>
Özellik tabloları Delta tabloları olarak depolanır. (Özellik Deposu istemcisi v0.3.6 ve üzeri) veya create_feature_table
(v0.3.5 ve üzeri) ile create_table
bir özellik tablosu oluşturduğunuzda, veritabanı adını belirtmeniz gerekir. Örneğin, bu bağımsız değişken veritabanında recommender_system
adlı customer_features
bir Delta tablosu oluşturur.
name='recommender_system.customer_features'
Bir özellik tablosunu çevrimiçi bir mağazaya yayımladığınızda, varsayılan tablo ve veritabanı adı, tabloyu oluştururken belirtilenlerdir; yöntemini kullanarak farklı adlar publish_table
belirtebilirsiniz.
Databricks Özellik Deposu kullanıcı arabirimi, diğer meta verilerle birlikte çevrimiçi depodaki tablo ve veritabanının adını gösterir.
Databricks Özellik Deposu'nda özellik tablosu oluşturma
Not
Ayrıca var olan bir Delta tablosunu özellik tablosu olarak da kaydedebilirsiniz. Bkz . Var olan bir Delta tablosunu özellik tablosu olarak kaydetme.
Özellik tablosu oluşturmanın temel adımları şunlardır:
- Özellikleri hesaplamak için Python işlevlerini yazın. Her işlevin çıkışı, benzersiz bir birincil anahtara sahip bir Apache Spark DataFrame olmalıdır. Birincil anahtar bir veya daha fazla sütundan oluşabilir.
- ve
create_table
örneğiniFeatureStoreClient
oluşturarak (v0.3.6 ve üzeri) veyacreate_feature_table
(v0.3.5 ve üzeri) özellik tablosu oluşturun. - kullanarak
write_table
özellik tablosunu doldurun.
Aşağıdaki örneklerde kullanılan komutlar ve parametreler hakkında ayrıntılı bilgi için bkz . Feature Store Python API başvurusu.
V0.3.6 ve üzeri
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 ve altı
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'
)
Mevcut Delta tablosunu özellik tablosu olarak kaydetme
v0.3.8 ve üzeri sürümleriyle, var olan bir Delta tablosunu özellik tablosu olarak kaydedebilirsiniz. Delta tablosu meta veri deposunda bulunmalıdır.
Not
Kayıtlı bir özellik tablosunu güncelleştirmek için Özellik Deposu Python API'sini kullanmanız gerekir.
fs.register_table(
delta_table='recommender.customer_features',
primary_keys='customer_id',
description='Customer features'
)
Özellik tablolarına erişimi denetleme
Bkz. Özellik tablolarına erişimi denetleme.
Özellik tablosunu güncelleştirme
Yeni özellikler ekleyerek veya birincil anahtara göre belirli satırları değiştirerek bir özellik tablosunu güncelleştirebilirsiniz.
Aşağıdaki özellik tablosu meta verileri güncelleştirilemiyor:
- Birincil anahtar
- Bölüm anahtarı
- Mevcut bir özelliğin adı veya türü
Mevcut özellik tablosuna yeni özellikler ekleme
Mevcut bir özellik tablosuna yeni özellikler eklemek için şu iki yöntemden birini kullanabilirsiniz:
- Mevcut özellik hesaplama işlevini güncelleştirin ve döndürülen DataFrame ile çalıştırın
write_table
. Bu, özellik tablosu şemasını güncelleştirir ve yeni özellik değerlerini birincil anahtara göre birleştirir. - Yeni özellik değerlerini hesaplamak için yeni bir özellik hesaplama işlevi oluşturun. Bu yeni hesaplama işlevi tarafından döndürülen DataFrame, özellik tablolarının birincil anahtarlarını ve bölüm anahtarlarını (tanımlandıysa) içermelidir. Aynı birincil anahtarı kullanarak yeni özellikleri mevcut özellik tablosuna yazmak için DataFrame ile komutunu çalıştırın
write_table
.
Özellik tablosunda yalnızca belirli satırları güncelleştirme
içinde write_table
kullanınmode = "merge"
. Çağrıda gönderilen DataFrame'de birincil anahtarı bulunmayan satırlar write_table
değişmeden kalır.
fs.write_table(
name='recommender.customer_features',
df = customer_features_df,
mode = 'merge'
)
Özellik tablosunu güncelleştirmek için iş zamanlama
Özellik tablolarındaki özelliklerin her zaman en son değerlere sahip olduğundan emin olmak için Databricks, özellik tablonuzu her gün gibi düzenli aralıklarla güncelleştirmek için not defteri çalıştıran bir iş oluşturmanızı önerir. Önceden oluşturulmuş zamanlanmamış bir işiniz varsa, özellik değerlerinin her zaman güncel olduğundan emin olmak için bunu zamanlanmış bir işe dönüştürebilirsiniz. Bkz. İş akışlarını zamanlama ve düzenleme.
Bir özellik tablosunu mode='merge'
güncelleştirme kodu, aşağıdaki örnekte gösterildiği gibi kullanır.
fs = FeatureStoreClient()
customer_features_df = compute_customer_features(data)
fs.write_table(
df=customer_features_df,
name='recommender_system.customer_features',
mode='merge'
)
Günlük özelliklerin geçmiş değerlerini depolama
Bileşik birincil anahtarla bir özellik tablosu tanımlayın. Tarihi birincil anahtara ekleyin. Örneğin, bir özellik tablosu store_purchases
için, verimli okumalar için bileşik birincil anahtar (date
, user_id
) ve bölüm anahtarı date
kullanabilirsiniz.
fs.create_table(
name='recommender_system.customer_features',
primary_keys=['date', 'customer_id'],
partition_columns=['date'],
schema=customer_features_df.schema,
description='Customer features'
)
Ardından özellik tablosu filtrelemesinden date
ilgilendiğiniz zaman aralığına kadar okumak için kod oluşturabilirsiniz.
Sütunu bağımsız değişkenini kullanarak timestamp_keys
zaman damgası anahtarı olarak belirterek bir zaman serisi özellik tablosu da oluşturabilirsiniz.date
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'
)
Bu, veya score_batch
kullanırken create_training_set
belirli bir noktaya aramaları etkinleştirir. Sistem, belirttiğiniz zaman damgası birleştirme işlemini timestamp_lookup_key
kullanarak gerçekleştirir.
Özellik tablosunu güncel tutmak için, özellik yazmak veya yeni özellik değerlerini özellik tablosuna akışla aktarmak için düzenli olarak zamanlanmış bir iş ayarlayın.
Özellikleri güncelleştirmek için bir akış özelliği hesaplama işlem hattı oluşturma
Akış özelliği hesaplama işlem hattı oluşturmak için bir akışı DataFrame
bağımsız değişken olarak geçirin write_table
. Bu yöntem bir StreamingQuery
nesne döndürür.
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'
)
Özellik tablosundan okuma
Özellik değerlerini okumak için kullanın read_table
.
fs = feature_store.FeatureStoreClient()
customer_features_df = fs.read_table(
name='recommender.customer_features',
)
Özellik tablolarını arama ve göz atma
Özellik tablolarını aramak veya göz atmak için Özellik Deposu kullanıcı arabirimini kullanın.
Kenar çubuğunda Machine Learning > Özellik Deposu'na tıklayarak Özellik Deposu kullanıcı arabirimini görüntüleyin.
Arama kutusuna özellik tablosu, özellik veya özellik hesaplaması için kullanılan veri kaynağı adının tamamını veya bir bölümünü girin. Ayrıca, bir etiketin anahtarının veya değerinin tamamını veya bir kısmını da girebilirsiniz. Arama metni büyük/küçük harfe duyarlı değildir.
Özellik tablosu meta verilerini alma
Özellik tablosu meta verilerini almak için kullanılan API, kullandığınız Databricks çalışma zamanı sürümüne bağlıdır. v0.3.6 ve üzeri ile kullanın get_table
. v0.3.5 ve altı ile kullanın 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")
Özellik tablosu etiketleriyle çalışma
Etiketler, özellik tablolarını aramak için oluşturabileceğiniz ve kullanabileceğiniz anahtar-değer çiftleridir. Özellik Deposu kullanıcı arabirimini veya Özellik Deposu Python API'sini kullanarak etiket oluşturabilir, düzenleyebilir ve silebilirsiniz.
Kullanıcı arabiriminde özellik tablosu etiketleriyle çalışma
Özellik tablolarını aramak veya göz atmak için Özellik Deposu kullanıcı arabirimini kullanın. Kullanıcı arabirimine erişmek için kenar çubuğunda Machine Learning > Özellik Deposu'na tıklayın.
Özellik Deposu kullanıcı arabirimini kullanarak etiket ekleme
Henüz açık değilse tıklayın . Etiketler tablosu görüntülenir.
Ad ve Değer alanlarına tıklayın ve etiketinizin anahtarını ve değerini girin.
Ekle'yi tıklatın.
Özellik Deposu kullanıcı arabirimini kullanarak etiketi düzenleme veya silme
Mevcut bir etiketi düzenlemek veya silmek için Eylemler sütunundaki simgeleri kullanın.
Özellik Deposu Python API'sini kullanarak özellik tablosu etiketleriyle çalışma
v0.4.1 ve üzerini çalıştıran kümelerde, Özellik Deposu Python API'sini kullanarak etiket oluşturabilir, düzenleyebilir ve silebilirsiniz.
Gereksinimler
Özellik Deposu istemcisi v0.4.1 ve üzeri
Özellik Deposu Python API'sini kullanarak etiketli özellik tablosu oluşturma
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", ...},
...
)
Özellik Deposu Python API'sini kullanarak etiket ekleme, güncelleştirme ve silme
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")
Özellik tablosu için veri kaynaklarını güncelleştirme
Özellik deposu, özellikleri hesaplamak için kullanılan veri kaynaklarını otomatik olarak izler. Ayrıca, Özellik Deposu Python API'sini kullanarak veri kaynaklarını el ile de güncelleştirebilirsiniz.
Gereksinimler
Özellik Deposu istemcisi v0.5.0 ve üzeri
Özellik Deposu Python API'sini kullanarak veri kaynakları ekleme
Aşağıda bazı örnek komutlar verilmiş. Ayrıntılar için API belgelerine bakın.
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")
Özellik Deposu Python API'sini kullanarak veri kaynaklarını silme
Ayrıntılar için API belgelerine bakın.
Not
Aşağıdaki komut, kaynak adlarla eşleşen tüm türlerdeki ("tablo", "yol" ve "özel") veri kaynaklarını siler.
from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()
fs.delete_data_sources(feature_table_name="clicks", sources_names="user_info.clicks")
Özellik tablosunu silme
Özellik Deposu kullanıcı arabirimini veya Özellik Deposu Python API'sini kullanarak bir özellik tablosunu silebilirsiniz.
Not
- Özellik tablosunun silinmesi, yukarı akış üreticilerinde ve aşağı akış tüketicilerinde (modeller, uç noktalar ve zamanlanmış işler) beklenmeyen hatalara yol açabilir. Yayımlanan çevrimiçi mağazaları bulut sağlayıcınızla birlikte silmeniz gerekir.
- API kullanarak bir özellik tablosunu sildiğinizde, temel delta tablosu da bırakılır. Kullanıcı arabiriminden bir özellik tablosunu sildiğinizde, temel delta tablosunu ayrı olarak bırakmanız gerekir.
Kullanıcı arabirimini kullanarak özellik tablosunu silme
Özellik tablosu sayfasında, özellik tablosu adının sağındaki öğesine tıklayın ve Sil'i seçin. Özellik tablosu için CAN MANAGE izniniz yoksa bu seçeneği görmezsiniz.
Özellik Tablosunu Sil iletişim kutusunda, onaylamak için Sil'e tıklayın.
Temel delta tablosunu da bırakmak istiyorsanız, not defterinde aşağıdaki komutu çalıştırın.
%sql DROP TABLE IF EXISTS <feature-table-name>;
Özellik Deposu Python API'sini kullanarak özellik tablosunu silme
Özellik Deposu istemcisi v0.4.1 ve üzerini kullanarak drop_table
bir özellik tablosunu silebilirsiniz. ile drop_table
bir tabloyu sildiğinizde, temel delta tablosu da bırakılır.
fs.drop_table(
name='recommender_system.customer_features'
)