Verwenden von Feature-Ansichten

Bemerkung

Der Snowflake Feature Store API ist im Snowpark ML Python-Paket (snowflake-ml-python) v1.5.0 und höher verfügbar.

Eine Feature-Ansicht kapselt die Umwandlung von Rohdaten in ein oder mehrere zusammenhängende Features. Alle Features in einer Feature-Ansicht werden nach demselben Zeitplan aktualisiert. Feature-Speicher werden von einer Feature-Tabelle unterstützt, in der die Features gespeichert werden.

Der Snowflake Feature Store unterstützt zwei verschiedene Arten von Feature-Ansichten:

  • Von Snowflake verwaltete Feature-Ansicht: Die Feature-Tabelle wird von Snowflake nach einem von Ihnen festgelegten Zeitplan automatisch aus Rohdaten aktualisiert. Eine Feature-Ansicht gilt als von Snowflake verwaltet, wenn Sie einen Zeitplan für ihre Aktualisierung vorsehen.

  • Externe Feature-Ansicht: Wenn Sie keinen Zeitplan für die Aktualisierung der Feature-Ansicht bereitstellen, gilt sie als extern. Sie sind für die Pflege der Feature-Tabelle verantwortlich und aktualisieren die Features aus den Rohdaten nach Bedarf, z. B. mit einem Tool wie dbt.

Die Klasse snowflake.ml.feature_store.FeatureView ist die Python-API für die Interaktion mit Feature-Ansichten. Der FeatureView-Konstruktor akzeptiert ein Snowpark-DataFrame, das die Logik zum Generieren der Features enthält. Die bereitgestellte DataFrame muss auch die join_keys-Spalten enthalten, die in den mit der Feature-Ansicht verbundenen Entitäten angegeben sind. Der Name einer Zeitstempelspalte ist erforderlich, wenn Ihre Feature-Ansicht Zeitreihen-Features enthält.

In der Feature Store API-Referenz finden Sie alle Details zu Python-API.

Erstellen einer von Snowflake verwalteten Feature-Ansicht

Eine von Snowflake verwaltete Feature-Ansicht verwendet eine dynamische Tabelle als Feature-Tabelle. Features werden nach einem von Ihnen festgelegten Zeitplan aus den Quelldaten extrahiert, wobei neue Daten effizient und schrittweise verarbeitet werden. Die folgende Abbildung zeigt den Datenfluss von der Quelle über die Feature-Transformationen bis hin zur Feature-Tabelle.

Eine verwaltete Feature-Ansicht im Snowflake Feature Store

Um eine von Snowflake verwaltete Feature-Ansicht zu erstellen, verwenden Sie Code wie den folgenden Python-Block, wobei entity die Entität ist, mit der die Features verknüpft sind, und my_df der Snowpark DataFrame ist, der Ihre Logik zur Transformation der Features auf der Grundlage Ihrer Quelldaten enthält.

Die Einstellung des refresh_freq-Parameters kennzeichnet die Feature-Ansicht als von Snowflake verwaltet. Der Wert kann ein Zeitdelta sein (Mindestwert 1 minute), oder er kann ein cron-Ausdruck mit Zeitzone sein (z. B. * * * * * America/Los_Angeles).

from snowflake.ml.feature_store import FeatureView

managed_fv = FeatureView(
    name="MY_MANAGED_FV",
    entities=[entity],
    feature_df=my_df,                   # Snowpark DataFrame containing feature transformations
    timestamp_col="ts",                 # optional timestamp column name in the dataframe
    refresh_freq="5 minutes",           # how often feature data refreshes
    desc="my managed feature view"      # optional description
)
Copy

Sie können Feature-Transformationen mit Snowpark Python oder in SQL schreiben. Die Snowpark Python-API bietet Hilfsprogrammfunktionen zum Definieren gängiger Feature-Typen wie z. B. fensterbasierte Aggregationen. Unter Gemeinsame Feature- und Abfrage-Muster finden Sie Beispiele für die Verwendung dieser Funktionen.

Um sich für eine inkrementelle Aktualisierung zu qualifizieren, muss für jede Quelltabelle die Änderungsverfolgung aktiviert sein. Wenn die Änderungsverfolgung in einer Quelltabelle noch nicht aktiviert ist, versucht Snowflake, sie bei der Erstellung der dynamischen Tabelle der Feature-Ansicht automatisch zu aktivieren. Dies erfordert OWNERSHIP der Tabelle. Wenn Sie nicht Eigentümer der Tabelle sind, bitten Sie den Eigentümer, die Änderungsverfolgung zu aktivieren, oder erstellen Sie die Feature-Ansicht mit refresh_mode='FULL', die die Quelltabelle bei jeder Aktualisierung vollständig liest.

Erstellen einer externen Feature-Ansicht

Features, die außerhalb des Snowflake Feature Store erzeugt wurden, können registriert werden, indem der refresh_freq-Parameter bei der Erstellung auf None eingestellt wird. In diesem Fall müssen Sie die Feature-Tabelle selbst erstellen und pflegen. Das Feature DataFrame basiert auf der Feature-Tabelle, nicht auf der Rohdatenquelle, und enthält in der Regel eine einfache Projektion aus dieser Tabelle, ohne Transformationen.

Bemerkung

Sie können Feature-Transformationen in der Feature-Ansicht DataFrame durchführen. Diese Berechnungen werden bei Bedarf durchgeführt, wenn Sie Daten aus der Feature-Ansicht abrufen. Externe Feature-Ansichten sind jedoch in erster Linie für die Verwendung mit Tools wie dbt gedacht, die Sie bereits zur Durchführung von Feature-Transformationen verwenden. Im Allgemeinen sollten Sie von Snowflake verwaltete Feature-Ansichten verwenden, wenn Sie möchten, dass Snowflake eine Feature-Transformation durchführt.

Die folgende Abbildung zeigt den Fluss der Daten von der Quelle über die Umwandlung von Features durch ein externes Tool (hier dbt) in eine Feature-Tabelle.

Eine verwaltete Feature-Ansicht im Snowflake Feature Store

Externe Feature-Ansichten werden als Ansichten auf Ihrer Feature-Tabelle implementiert, so dass für sie keine zusätzlichen Kosten für den Speicher anfallen.

Der folgende Code zeigt, wie Sie eine externe Feature-Ansicht erstellen.

external_fv = FeatureView(
    name="MY_EXTERNAL_FV",
    entities=[entity],
    feature_df=my_df,                   # Snowpark DataFrame referencing the feature table
    timestamp_col="ts",                 # optional timestamp column name in the dataframe
    refresh_freq=None,                  # None means the feature view is external
    desc="my external feature view"     # optional description
)
Copy

Feature-Ansichten besser auffindbar machen

Das Hinzufügen von Beschreibungen der einzelnen Features zu FeatureView erleichtert das Auffinden von Features mit Snowsight Universal Search. Das folgende Beispiel verwendet die attach_feature_desc-Methode einer Feature-Ansicht, um eine kurze Beschreibung jedes enthaltenen Features in einem Python-Dictionary bereitzustellen:

external_fv = external_fv.attach_feature_desc(
    {
        "SENDERID": "Sender account ID for the transaction",
        "RECEIVERID": "Receiver account ID for the transaction",
        "IBAN": "International Bank Identifier for the receiver bank",
        "AMOUNT": "Amount of the transaction"
    }
)
Copy

Beide Arten von Feature-Ansichten können mit Feature-Beschreibungen angereichert werden.

Registrieren von Feature-Ansichten

Sobald eine Feature-Ansicht vollständig definiert ist, können Sie sie mit der Methode register_feature_view des Feature-Speichers mit einem angepassten Namen und einer Version im Feature-Speicher registrieren. Die inkrementelle Wartung (für unterstützte Abfragetypen) und die automatische Aktualisierung erfolgen auf der Grundlage der angegebenen Aktualisierungshäufigkeit.

Wenn die bereitgestellte Abfrage nicht über die inkrementelle Wartung mittels einer dynamischen Tabelle gepflegt werden kann, wird die Tabelle in der angegebenen Häufigkeit vollständig über die Abfrage aktualisiert. Dies kann zu einer größeren Verzögerung bei der Aktualisierung von Features und zu höheren Wartungskosten führen. Sie können die Abfragelogik ändern und die Abfrage in mehrere kleinere Abfragen aufteilen, die eine inkrementelle Wartung unterstützen, oder ein größeres virtuelles Warehouse für die Wartung dynamischer Tabellen bereitstellen. Aktuelle Informationen zu den Einschränkungen bei dynamischen Tabellen finden Sie unter Allgemeine Einschränkungen.

registered_fv: FeatureView = fs.register_feature_view(
    feature_view=managed_fv,    # feature view created above, could also use external_fv
    version="1",
    block=True,         # whether function call blocks until initial data is available
    overwrite=False,    # whether to replace existing feature view with same name/version
)
Copy

Die Pipeline-Definition einer Feature-Ansicht ist nach der Registrierung unveränderlich und ermöglicht eine konsistente Feature-Verarbeitung, solange die Feature-Ansicht existiert.

Abrufen von Feature-Ansichten

Sobald eine Feature-Ansicht im Feature-Speicher registriert ist, können Sie sie dort abrufen, wenn Sie sie benötigen, indem Sie die get_feature_view-Methode des Feature-Speichers verwenden:

retrieved_fv: FeatureView = fs.get_feature_view(
    name="MY_MANAGED_FV",
    version="1"
)
Copy

Entdecken von Feature-Ansichten

Sie können alle registrierten Feature-Ansichten im Feature Store auflisten und dabei optional nach dem Namen der Entität oder der Feature-Ansicht filtern, indem Sie die Methode list_feature_views verwenden. Informationen zu den übereinstimmenden Features werden als Snowpark-DataFrame zurückgegeben. Der folgende Code zeigt ein Beispiel für das Abrufen einer Liste von Feature-Ansichten; fs ist eine Referenz auf den Feature-Speicher.

fs.list_feature_views(
    entity_name="<entity_name>",                # optional
    feature_view_name="<feature_view_name>",    # optional
).show()
Copy

Features können auch über den Snowsight Feature Store-UI oder die Universal Search gefunden werden.

Aktualisieren von Feature-Ansichten

Sie können einige Eigenschaften einer Feature-Ansicht, die Sie im Feature-Store registriert haben, mit der update_feature_view-Methode des Feature-Stores aktualisieren. Die aktualisierbaren Eigenschaften sind:

  • Die Häufigkeit der Aktualisierung der Feature-Ansicht

  • Das Warehouse, in dem die Feature-Transformationen ausgeführt werden

  • Die Beschreibung der Feature-Ansicht

Feature-Definitionen und Spalten können nicht geändert werden. Um die Features in einem Feature Store zu ändern, erstellen Sie eine neue Version der Feature-Ansicht.

When you call update_feature_view, specify the feature view version to be updated by providing its name and version. The additional parameters specify the properties to be updated; you can specify just the ones you want to change. The following code shows an example of changing feature view properties; :code:fs is a reference to the feature store.

fs.update_feature_view(
    name="<name>",
    version="<version>",
    refresh_freq="<new_fresh_freq>",    # optional
    warehouse="<new_warehouse>",        # optional
    desc="<new_description>",           # optional
)
Copy

Löschen von Feature-Ansichten

You can delete a feature view from the feature store with the feature store’s delete_feature_view method. The following code shows an example of deleting a feature view; :code:fs is a reference to the feature store.

fs.delete_feature_view(
    feature_view="<name>",
    version="<version>",
)
Copy

Warnung

Das Löschen einer Version der Feature-Ansicht unterbricht alle Pipelines, die sie verwenden. Vergewissern Sie sich, dass die Version der Feature-Ansicht nicht in Gebrauch ist, bevor Sie sie löschen.

Hinweise zu Kosten

Von Snowflake verwaltete Feature-Ansichten verwenden dynamische Tabellen von Snowflake. Weitere Informationen zur Überwachung dynamischer Tabellen finden Sie unter Allgemeine Informationen zum Überwachen dynamischer Tabellen, und Informationen zu den Kosten dynamischer Tabellen finden Sie unter Erläuterungen zu den Kosten von dynamischen Tabellen. Externe Feature-Ansichten verwenden Ansichten, für die keine zusätzlichen Kosten für Speicher anfallen.

Bekannte Einschränkungen

  • Die maximale Anzahl der von Snowflake verwalteten Feature-Ansichten und die Abfragen zur Feature-Transformation in Feature-Ansichten unterliegen den Beschränkungen von für dynamische Tabellen.

  • Nicht alle Feature-Transformationsabfragen werden von der dynamischen inkrementellen Aktualisierung unterstützt. Siehe Einschränkungen.

  • Namen von Feature-Ansichten sind SQL-Bezeichner und unterliegen den Snowflake-Anforderungen an Bezeichner.

  • Versionen von Feature-Ansichten sind Zeichenfolgen und haben eine maximale Länge von 128 Zeichen. Einige Zeichen sind nicht zulässig und führen zu einer Fehlermeldung.