Arbeta med funktionstabeller i funktionsarkivet för arbetsytor
Kommentar
Den här dokumentationen beskriver funktionsarkivet för arbetsytor. Databricks rekommenderar att du använder funktionsteknik i Unity Catalog. Funktionsarkivet för arbetsytor kommer att bli inaktuellt i framtiden.
På den här sidan beskrivs hur du skapar och arbetar med funktionstabeller i arbetsytans funktionsarkiv.
Kommentar
Om din arbetsyta är aktiverad för Unity Catalog är alla tabeller som hanteras av Unity Catalog som har en primärnyckel automatiskt en funktionstabell som du kan använda för modellträning och slutsatsdragning. Alla Unity Catalog-funktioner, till exempel säkerhet, ursprung, taggning och åtkomst mellan arbetsytor, är automatiskt tillgängliga för funktionstabellen. Information om hur du arbetar med funktionstabeller i en Unity Catalog-aktiverad arbetsyta finns i Arbeta med funktionstabeller.
Information om hur du spårar funktions ursprung och färskhet finns i Identifiera funktioner och spåra funktions härkomst.
Kommentar
Databas- och funktionstabellnamn får endast innehålla alfanumeriska tecken och understreck (_).
Skapa en databas för funktionstabeller
Innan du skapar några funktionstabeller måste du skapa en databas för att lagra dem.
%sql CREATE DATABASE IF NOT EXISTS <database-name>
Funktionstabeller lagras som Delta-tabeller. När du skapar en funktionstabell med create_table
(Feature Store-klienten v0.3.6 och senare) eller create_feature_table
(v0.3.5 och senare) måste du ange databasnamnet. Det här argumentet skapar till exempel en Delta-tabell med namnet customer_features
i databasen recommender_system
.
name='recommender_system.customer_features'
När du publicerar en funktionstabell i en onlinebutik är standardtabellen och databasnamnet de som angavs när du skapade tabellen. du kan ange olika namn med hjälp av publish_table
metoden .
Användargränssnittet för Databricks-funktionsarkivet visar namnet på tabellen och databasen i onlinebutiken, tillsammans med andra metadata.
Skapa en funktionstabell i Databricks Feature Store
Kommentar
Du kan också registrera en befintlig Delta-tabell som en funktionstabell. Se Registrera en befintlig Delta-tabell som en funktionstabell.
De grundläggande stegen för att skapa en funktionstabell är:
- Skriv Python-funktionerna för att beräkna funktionerna. Utdata för varje funktion ska vara en Apache Spark DataFrame med en unik primärnyckel. Primärnyckeln kan bestå av en eller flera kolumner.
- Skapa en funktionstabell genom att instansiera en
FeatureStoreClient
och användacreate_table
(v0.3.6 och senare) ellercreate_feature_table
(v0.3.5 och senare). - Fyll i funktionstabellen med .
write_table
Mer information om de kommandon och parametrar som används i följande exempel finns i Referens för Python API för funktionsarkiv.
V0.3.6 och senare
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 och lägre
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'
)
Registrera en befintlig Delta-tabell som en funktionstabell
Med v0.3.8 och senare kan du registrera en befintlig Delta-tabell som en funktionstabell. Delta-tabellen måste finnas i metaarkivet.
Kommentar
Om du vill uppdatera en registrerad funktionstabell måste du använda Python-API:et för Funktionsarkiv.
fs.register_table(
delta_table='recommender.customer_features',
primary_keys='customer_id',
description='Customer features'
)
Kontrollera åtkomsten till funktionstabeller
Se Kontrollera åtkomst till funktionstabeller.
Uppdatera en funktionstabell
Du kan uppdatera en funktionstabell genom att lägga till nya funktioner eller genom att ändra specifika rader baserat på primärnyckeln.
Det går inte att uppdatera följande metadata för funktionstabellen:
- Primärnyckel
- Partitionsnyckel
- Namn eller typ av en befintlig funktion
Lägga till nya funktioner i en befintlig funktionstabell
Du kan lägga till nya funktioner i en befintlig funktionstabell på något av två sätt:
- Uppdatera den befintliga funktionen för funktionsberäkning och kör
write_table
med den returnerade DataFrame. Detta uppdaterar funktionstabellschemat och sammanfogar nya funktionsvärden baserat på primärnyckeln. - Skapa en ny funktionsberäkningsfunktion för att beräkna de nya funktionsvärdena. Den DataFrame som returneras av den nya beräkningsfunktionen måste innehålla funktionstabellernas primära nycklar och partitionsnycklar (om den definieras). Kör
write_table
med DataFrame för att skriva de nya funktionerna till den befintliga funktionstabellen med samma primärnyckel.
Uppdatera endast specifika rader i en funktionstabell
Använd mode = "merge"
i write_table
. Rader vars primärnyckel inte finns i dataramen som skickades i anropet write_table
förblir oförändrade.
fs.write_table(
name='recommender.customer_features',
df = customer_features_df,
mode = 'merge'
)
Schemalägga ett jobb för att uppdatera en funktionstabell
För att säkerställa att funktioner i funktionstabeller alltid har de senaste värdena rekommenderar Databricks att du skapar ett jobb som kör en notebook-fil för att regelbundet uppdatera funktionstabellen, till exempel varje dag. Om du redan har skapat ett icke-schemalagt jobb kan du konvertera det till ett schemalagt jobb för att se till att funktionsvärdena alltid är uppdaterade. Se Schemalägg och samordna arbetsflöden.
Kod för att uppdatera en funktionstabell använder mode='merge'
, som visas i följande exempel.
fs = FeatureStoreClient()
customer_features_df = compute_customer_features(data)
fs.write_table(
df=customer_features_df,
name='recommender_system.customer_features',
mode='merge'
)
Lagra tidigare värden för dagliga funktioner
Definiera en funktionstabell med en sammansatt primärnyckel. Inkludera datumet i primärnyckeln. För en funktionstabell store_purchases
kan du till exempel använda en sammansatt primärnyckel (date
, user_id
) och partitionsnyckel date
för effektiva läsningar.
fs.create_table(
name='recommender_system.customer_features',
primary_keys=['date', 'customer_id'],
partition_columns=['date'],
schema=customer_features_df.schema,
description='Customer features'
)
Du kan sedan skapa kod som ska läsas från funktionstabellfiltreringen date
till den aktuella tidsperioden.
Du kan också skapa en funktionstabell för tidsserier genom att date
ange kolumnen som en tidsstämpelnyckel med argumentet timestamp_keys
.
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'
)
Detta möjliggör sökning till tidpunkt när du använder create_training_set
eller score_batch
. Systemet utför en tidsstämpelkoppling med hjälp av det timestamp_lookup_key
du anger.
För att hålla funktionstabellen uppdaterad konfigurerar du ett regelbundet schemalagt jobb för att skriva funktioner eller strömmar nya funktionsvärden till funktionstabellen.
Skapa en pipeline för strömningsfunktionsberäkning för att uppdatera funktioner
Om du vill skapa en pipeline för strömningsfunktionsberäkning skickar du en strömning DataFrame
som ett argument till write_table
. Den här metoden returnerar ett StreamingQuery
objekt.
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'
)
Läsa från en funktionstabell
Använd read_table
för att läsa funktionsvärden.
fs = feature_store.FeatureStoreClient()
customer_features_df = fs.read_table(
name='recommender.customer_features',
)
Sök och bläddra bland funktionstabeller
Använd funktionsarkivets användargränssnitt för att söka efter eller bläddra bland funktionstabeller.
I sidofältet väljer du Machine Learning > Feature Store för att visa funktionsarkivets användargränssnitt.
I sökrutan anger du hela eller en del av namnet på en funktionstabell, en funktion eller en datakälla som används för funktionsberäkning. Du kan också ange hela eller en del av nyckeln eller värdet för en tagg. Söktexten är skiftlägeskänslig.
Hämta metadata för funktionstabell
API:et för att hämta metadata för funktionstabeller beror på vilken Databricks-körningsversion du använder. Med v0.3.6 och senare använder du get_table
. Med v0.3.5 och lägre använder du 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")
Arbeta med funktionstabelltaggar
Taggar är nyckel/värde-par som du kan skapa och använda för att söka efter funktionstabeller. Du kan skapa, redigera och ta bort taggar med hjälp av funktionsarkivets användargränssnitt eller Python-API:et för funktionsarkiv.
Arbeta med funktionstabelltaggar i användargränssnittet
Använd funktionsarkivets användargränssnitt för att söka efter eller bläddra bland funktionstabeller. Om du vill komma åt användargränssnittet går du till sidopanelen och väljer Machine Learning > Feature Store.
Lägga till en tagg med hjälp av funktionsarkivets användargränssnitt
Klicka om den inte redan är öppen. Tabellen taggar visas.
Klicka i fälten Namn och Värde och ange nyckeln och värdet för taggen.
Klicka på Lägg till.
Redigera eller ta bort en tagg med hjälp av funktionsarkivets användargränssnitt
Om du vill redigera eller ta bort en befintlig tagg använder du ikonerna i kolumnen Åtgärder .
Arbeta med funktionstabelltaggar med hjälp av Python-API:et för Funktionsarkiv
I kluster som kör v0.4.1 och senare kan du skapa, redigera och ta bort taggar med hjälp av Python-API:et för funktionsarkivet.
Krav
Funktionsarkivklient v0.4.1 och senare
Skapa funktionstabell med tagg med hjälp av Python-API:et för Funktionsarkiv
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", ...},
...
)
Lägga till, uppdatera och ta bort taggar med hjälp av Python-API:et för Funktionsarkiv
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")
Uppdatera datakällor för en funktionstabell
Funktionsarkivet spårar automatiskt de datakällor som används för att beräkna funktioner. Du kan också uppdatera datakällorna manuellt med hjälp av Python-API:et för Funktionsarkiv.
Krav
Feature Store-klienten v0.5.0 och senare
Lägga till datakällor med hjälp av Python-API:et för Funktionsarkiv
Nedan visas några exempelkommandon. Mer information finns i API-dokumentationen.
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")
Ta bort datakällor med hjälp av Python-API:et för Funktionsarkiv
Mer information finns i API-dokumentationen.
Kommentar
Följande kommando tar bort datakällor av alla typer ("tabell", "sökväg" och "anpassad") som matchar källnamnen.
from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()
fs.delete_data_sources(feature_table_name="clicks", sources_names="user_info.clicks")
Ta bort en funktionstabell
Du kan ta bort en funktionstabell med hjälp av funktionsarkivets användargränssnitt eller Python-API:et för funktionsarkiv.
Kommentar
- Om du tar bort en funktionstabell kan det leda till oväntade fel i överordnade producenter och nedströmsanvändare (modeller, slutpunkter och schemalagda jobb). Du måste ta bort publicerade onlinebutiker med din molnleverantör.
- När du tar bort en funktionstabell med hjälp av API:et tas även den underliggande Delta-tabellen bort. När du tar bort en funktionstabell från användargränssnittet måste du ta bort den underliggande Delta-tabellen separat.
Ta bort en funktionstabell med hjälp av användargränssnittet
På funktionstabellsidan klickar du till höger om funktionstabellens namn och väljer Ta bort. Om du inte har behörigheten KAN HANTERA för funktionstabellen visas inte det här alternativet.
I dialogrutan Ta bort funktionstabell klickar du på Ta bort för att bekräfta.
Om du också vill släppa den underliggande Delta-tabellen kör du följande kommando i en notebook-fil.
%sql DROP TABLE IF EXISTS <feature-table-name>;
Ta bort en funktionstabell med hjälp av Python-API:et för Funktionsarkiv
Med Feature Store-klienten v0.4.1 och senare kan du använda drop_table
för att ta bort en funktionstabell. När du tar bort en tabell med drop_table
tas även den underliggande Delta-tabellen bort.
fs.drop_table(
name='recommender_system.customer_features'
)