Arbeta med funktioner i arbetsytans funktionslager

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 Funktionsteknik i Unity Catalog.

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:

  1. 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.
  2. Skapa en funktionstabell genom att instansiera en FeatureStoreClient och använda create_table (v0.3.6 och senare) eller create_feature_table (v0.3.5 och senare).
  3. 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.

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

  1. I sidofältet väljer du Machine Learning > Feature Store för att visa funktionsarkivets användargränssnitt.

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

    Feature search example

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

  1. Klicka om Tag icon den inte redan är öppen. Tabellen taggar visas.

    tag table

  2. Klicka i fälten Namn och Värde och ange nyckeln och värdet för taggen.

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

tag actions

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.

Behov

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.

Behov

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

  1. På funktionstabellsidan klickar du Button Down 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.

    Select delete from drop-down menu

  2. I dialogrutan Ta bort funktionstabell klickar du på Ta bort för att bekräfta.

  3. 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_tabletas även den underliggande Delta-tabellen bort.

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