Freigeben über


Arbeiten mit Features im Arbeitsbereich-Feature Store

Hinweis

In dieser Dokumentation wird der Featurespeicher des Arbeitsbereichs behandelt. Databricks empfiehlt die Verwendung von Feature Engineering in Unity Catalog. Der Featurespeicher des Arbeitsbereichs wird in Zukunft eingestellt.

Auf dieser Seite wird beschrieben, wie Sie Featuretabellen im Arbeitsbereichs-Feature Store erstellen und damit arbeiten.

Hinweis

Wenn Ihr Arbeitsbereich für Unity Catalog aktiviert ist, ist jede von Unity Catalog verwaltete Tabelle mit einem Primärschlüssel automatisch eine Featuretabelle, die Sie für Modelltraining und Rückschlüsse verwenden können. Alle Funktionen von Unity Catalog, wie z. B. Sicherheit, Herkunft, Tagging und arbeitsbereichsübergreifender Zugriff, sind automatisch für die Feature-Tabelle verfügbar. Informationen zum Arbeiten mit Featuretabellen in einem Arbeitsbereich mit Unity Catalog-Unterstützung finden Sie unter Feature Engineering in Unity Catalog.

Informationen zur Nachverfolgung der Herkunft und Aktualität von Features finden Sie unter Entdecken von Features und Nachverfolgen der Herkunft von Features.

Hinweis

Datenbank- und Featuretabellennamen dürfen nur alphanumerische Zeichen und Unterstriche (_) enthalten.

Erstellen einer Datenbank für Featuretabellen

Vor dem Erstellen von Featuretabellen müssen Sie eine Datenbank erstellen, um sie zu speichern.

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

Featuretabellen werden als Delta-Tabellen gespeichert. Wenn Sie eine Featuretabelle mit create_table (Featurespeicherclient v0.3.6 und höher) oder create_feature_table (v0.3.5 und niedriger) erstellen, müssen Sie den Datenbanknamen angeben. Mit diesem Argument wird beispielsweise eine Delta-Tabelle mit dem Namen customer_features in der Datenbank erstellt recommender_system.

name='recommender_system.customer_features'

Wenn Sie eine Featuretabelle in einem Onlineshop veröffentlichen, sind die Standardnamen der Tabelle und der Datenbank die Namen, die beim Erstellen der Tabelle angegeben wurden. Sie können mithilfe der publish_table-Methode die Namen ändern.

Die Benutzeroberfläche des Databricks-Featurespeichers zeigt den Namen der Tabelle und Datenbank im Onlineshop sowie andere Metadaten an.

Erstellen einer Featuretabelle in Databricks-Featurespeicher

Hinweis

Sie können auch einer vorhandene Delta-Tabelle als Featuretabelle registrieren. Weitere Informationen finden Sie unter Registrieren einer vorhandenen Delta-Tabelle als Featuretabelle.

Die grundlegenden Schritte zum Erstellen einer Featuretabelle sind die folgenden:

  1. Schreiben Sie die Python-Funktionen, um die Features zu berechnen. Jede Funktion sollte einen Apache Spark-Datenrahmen mit einem eindeutigen Primärschlüssel ausgeben. Der Primärschlüssel kann aus einer oder mehreren Spalten bestehen.
  2. Erstellen Sie eine Featuretabelle, indem Sie einen FeatureStoreClient instanziieren und create_table (v0.3.6 und höher) oder create_feature_table (v0.3.5 und niedriger) verwenden.
  3. Füllen Sie die Featuretabelle mithilfe von write_table auf.

Ausführliche Informationen zu den Befehlen und Parametern, die in den folgenden Beispielen verwendet werden, finden Sie in der Referenz zur Feature Store-Python-API.

Version 0.3.6 und höher

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'
)

Version 0.3.5 und niedriger

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'
)

Registrieren einer vorhandenen Delta-Tabelle als Featuretabelle

Mit v0.3.8 und höher können Sie eine vorhandene Delta-Tabelle als Featuretabelle registrieren. Die Delta-Tabelle muss im Metastore vorhanden sein.

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

Steuern des Zugriffs auf Featuretabellen

Weitere Informationen finden Sie unter Steuern des Zugriffs auf Featuretabellen.

Aktualisieren einer Featuretabelle

Sie können eine Featuretabelle aktualisieren, indem Sie neue Features hinzufügen oder bestimmte Zeilen basierend auf dem Primärschlüssel ändern.

Die folgenden Metadaten der Featuretabelle können nicht bearbeitet werden:

  • Primary key (Primärschlüssel)
  • Partitionsschlüssel
  • Name oder Typ eines vorhandenen Features

Hinzufügen neuer Features zu einer vorhandenen Featuretabelle

Sie können einer vorhandenen Featuretabelle auf zwei Arten neue Features hinzufügen:

  • Aktualisieren Sie die vorhandene Featureberechnungsfunktion, und führen Sie write_table mit dem zurückgegebenen Datenrahmen aus. Dadurch wird das Featuretabellenschema aktualisiert, und es werden neue Featurewerte basierend auf dem Primärschlüssel zusammengeführt.
  • Erstellen Sie eine neue Featureberechnungsfunktion, um die neuen Featurewerte zu berechnen. Der von dieser neuen Berechnungsfunktion zurückgegebene Datenrahmen muss die Primärschlüssel und Partitionsschlüssel der Featuretabellen enthalten (sofern definiert). Führen Sie write_table mit dem Datenrahmen aus, um die neuen Features unter Verwendung desselben Primärschlüssels in die vorhandene Featuretabelle zu schreiben.

Aktualisieren nur bestimmter Zeilen in einer Featuretabelle

Verwenden Sie mode = "merge" in write_table. Zeilen, deren Primärschlüssel nicht im Datenrahmen existiert, der im write_table-Aufruf gesendet wurde, bleiben unverändert.

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

Planen eines Auftrags zum Aktualisieren einer Featuretabelle

Für Databricks wird empfohlen, einen Auftrag zu erstellen, der ein Notebook zum regelmäßigen Aktualisieren Ihrer Featuretabelle (z. B. täglich) ausgeführt, um sicherzustellen, dass Features in Featuretabellen immer über die neuesten Werte verfügen. Wenn Sie bereits einen nicht geplanten Auftrag erstellt haben, können Sie ihn in einen geplanten Auftrag konvertieren, um sicherzustellen, dass die Featurewerte immer auf dem neuesten Stand sind.

Code zum Aktualisieren einer Featuretabelle verwendet mode='merge', wie im folgenden Beispiel gezeigt.

fs = FeatureStoreClient()

customer_features_df = compute_customer_features(data)

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

Speichern früherer Werte täglicher Features

Definieren Sie eine Featuretabelle mit einem zusammengesetzten Primärschlüssel. Schließen Sie das Datum in den Primärschlüssel ein. Für eine Featuretabelle store_purchases können Sie beispielsweise einen zusammengesetzten Primärschlüssel (date, user_id) und einen Partitionsschlüssel date für effiziente Lesevorgänge verwenden.

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

Anschließend können Sie Code erstellen, der aus der Featuretabellenfilterung nach date den für Sie bestimmten Zeitraum gelesen werden soll.

Sie können auch eine Zeitreihen-Featuretabelle erstellen, indem Sie die Spalte date mithilfe des Arguments timestamp_keys als Zeitstempelschlüssel festlegen.

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'
)

Dadurch werden Point-in-Time-Lookups aktiviert, wenn Sie create_training_set oder score_batch verwenden. Das System führt eine „Mit Stand vom“-Zeitstempelverknüpfung mithilfe des von Ihnen angegebenen timestamp_lookup_key aus.

Richten Sie einen regelmäßig geplanten Auftrag zum Schreiben von Features ein, oder streamen Sie neue Featurewerte in die Featuretabelle, um die Featuretabelle auf dem neuesten Stand zu halten.

Erstellen einer Pipeline für Streamingfunktionsberechnungen zum Aktualisieren von Features

Übergeben Sie ein Streaming-DataFrame-Objekt als Argument an write_table, um eine Pipeline für Streamingfunktionsberechnungen zu erstellen. Diese Methode gibt ein StreamingQuery-Objekt zurück.

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'
)

Lesen aus einer Featuretabelle

Verwenden Sie read_table, um Featurewerte zu lesen.

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

Suchen nach und Durchsuchen von Featuretabellen

Verwenden Sie die Benutzeroberfläche des Featurespeichers, um nach Featuretabellen zu suchen oder diese zu durchsuchen.

  1. Wählen Sie in der Randleiste Machine Learning > Feature Store aus, um die Feature Store-Benutzeroberfläche anzuzeigen.

  2. Geben Sie im Suchfeld den Namen einer Featuretabelle, eines Features oder einer Datenquelle ganz oder teilweise ein, das bzw. die für die Featureberechnung verwendet wird. Sie können auch den Schlüssel oder Wert eines Tags ganz oder teilweise eingeben. Bei Suchtext wird die Groß-/Kleinschreibung nicht beachtet.

    Feature search example

Abrufen von Featuretabellenmetadaten

Die API zum Abrufen von Featuretabellenmetadaten hängt von der Databricks-Runtimeversion ab, die Sie verwenden. Mit v0.3.6 und höher verwenden Sie get_table. Mit v0.3.5 und niedriger verwenden Sie 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")

Arbeiten mit Featuretabellentags

Tags sind Schlüssel-Wert-Paare, die Sie erstellen und verwenden können, um nach Featuretabellen zu suchen. Sie können Tags mithilfe der Benutzeroberfläche des Featurespeichers oder der Python-API für den Featurespeicher erstellen, bearbeiten und löschen.

Arbeiten mit Featuretabellentags auf der Benutzeroberfläche

Verwenden Sie die Benutzeroberfläche des Featurespeichers, um nach Featuretabellen zu suchen oder diese zu durchsuchen. Um die Benutzeroberfläche aufzurufen, wählen Sie in der Randleiste Machine Learning > Feature Store aus.

Hinzufügen eines Tags mithilfe der Benutzeroberfläche des Featurespeichers

  1. Klicken Sie auf das Tag icon, wenn sie noch nicht geöffnet ist. Die Tabelle „Tags“ wird angezeigt.

    tag table

  2. Klicken Sie in die Felder Name und Wert, und geben Sie den Schlüssel und Wert für Ihr Tag ein.

  3. Klicken Sie auf Hinzufügen.

Bearbeiten oder Löschen eines Tags mithilfe der Benutzeroberfläche des Featurespeichers

Um ein vorhandenes Tag zu bearbeiten oder zu löschen, verwenden Sie die Symbole in der Spalte Aktionen.

tag actions

Arbeiten mit Featuretabellentags mithilfe der Python-API für den Featurespeicher

In Clustern, in denen v0.4.1 und höher ausgeführt wird, können Sie Tags mithilfe der Python-API für den Featurespeicher erstellen, bearbeiten und löschen.

Anforderungen

Featurespeicherclient v0.4.1 und höher

Erstellen einer Featuretabelle mit Tag mithilfe der Python-API für den Featurespeicher

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", ...},
  ...
)

Hinzufügen, Aktualisieren und Löschen von Tags mithilfe der Python-API für den Featurespeicher

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")

Aktualisieren von Datenquellen für eine Featuretabelle

Der Featurespeicher verfolgt automatisch die Datenquellen nach, die zum Berechnen von Features verwendet werden. Sie können die Datenquellen auch manuell aktualisieren, indem Sie die Featurespeicher-Python-API verwenden.

Anforderungen

Featurespeicherclient v0.5.0 und höher

Hinzufügen von Datenquellen mithilfe der Featurespeicher-Python-API

Im Folgenden finden Sie einige Beispielbefehle. Details hierzu finden Sie in der API-Dokumentation.

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")

Löschen von Datenquellen mithilfe der Featurespeicher-Python-API

Details hierzu finden Sie in der API-Dokumentation.

Hinweis

Der folgende Befehl löscht Datenquellen sämtlicher Typen („Tabelle“, „Pfad“ und „Benutzerdefiniert“), die mit den Quellnamen übereinstimmen.

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

Löschen einer Featuretabelle

Sie können eine Featuretabelle über die Benutzeroberfläche des Featurespeichers oder die Featurespeicher-Python-API löschen.

Hinweis

  • Das Löschen einer Featuretabelle kann zu unerwarteten Fehlern bei Upstreamproducern und Downstreamconsumern (Modelle, Endpunkte und geplante Aufträge) führen. Sie müssen veröffentlichte Onlinespeicher bei Ihrem Cloudanbieter löschen.
  • Wenn Sie eine Featuretabelle mithilfe der API löschen, wird auch die zugrunde liegende Delta-Tabelle gelöscht. Wenn Sie eine Featuretabelle über die Benutzeroberfläche löschen, müssen Sie die zugrunde liegende Delta-Tabelle separat löschen.

Löschen einer Featuretabelle über die Benutzeroberfläche

  1. Klicken Sie auf der Featuretabellenseite rechts neben dem Namen der Featuretabelle auf Button Down, und wählen Sie Löschen aus. Wenn Sie nicht über die Berechtigung KANN VERWALTEN für die Featuretabelle verfügen, wird diese Option nicht angezeigt.

    Select delete from drop-down menu

  2. Klicken Sie im Dialogfeld „Delete Feature Table“ (Featuretabelle löschen) auf Löschen, um den Vorgang zu bestätigen.

  3. Wenn Sie auch die zugrunde liegende Delta-Tabelle löschen möchten, führen Sie den folgenden Befehl in einem Notebook aus.

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

Löschen einer Featuretabelle mithilfe der Python-API für den Featurespeicher

Beim Featurespeicherclient v0.4.1 und höher können Sie drop_table zum Löschen einer Featuretabelle verwenden. Wenn Sie eine Tabelle mit drop_table löschen, wird auch die zugrunde liegende Delta-Tabelle gelöscht.

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