Ç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_systemadlı 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

Özellik tablosu oluşturmanın temel adımları şunlardır:

  1. Ö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.
  2. ve create_table örneğini FeatureStoreClient oluşturarak (v0.3.6 ve üzeri) veya create_feature_table (v0.3.5 ve üzeri) özellik tablosu oluşturun.
  3. 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_tablekullanı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_purchasesiç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_batchkullanı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.

  1. Kenar çubuğunda Machine Learning > Özellik Deposu'na tıklayarak Özellik Deposu kullanıcı arabirimini görüntüleyin.

  2. 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 arama örneği

Ö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

  1. Henüz açık değilse tıklayın Etiket simgesi . Etiketler tablosu görüntülenir.

    etiket tablosu

  2. Ad ve Değer alanlarına tıklayın ve etiketinizin anahtarını ve değerini girin.

  3. 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.

etiket eylemleri

Ö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

  1. Özellik tablosu sayfasında, özellik tablosu adının sağındaki öğesine tıklayın Aşağı Düğmesi ve Sil'i seçin. Özellik tablosu için CAN MANAGE izniniz yoksa bu seçeneği görmezsiniz.

    Açılan menüden sil'i seçin

  2. Özellik Tablosunu Sil iletişim kutusunda, onaylamak için Sil'e tıklayın.

  3. 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_tablebir tabloyu sildiğinizde, temel delta tablosu da bırakılır.

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