Arbeta med funktionstabeller

I det här avsnittet:

Information om hur du spårar funktions ursprung och aktualitet finns i Använda funktionsarkivets användargränssnitt.

Anteckning

Databas- och funktionstabellnamn får inte innehålla bindestreck (-).

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 (Databricks Runtime 10.2 ML eller senare) eller create_feature_table (Databricks Runtime 10.1 ML eller 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 till 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 Feature Store visar namnet på tabellen och databasen i onlinebutiken, tillsammans med andra metadata.

Skapa en funktionstabell i Databricks Feature Store

Anteckning

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 (Databricks Runtime 10.2 ML eller senare) eller create_feature_table (Databricks Runtime 10.1 ML eller senare).
  3. Fyll i funktionstabellen med hjälp av write_table.

Databricks runtime 10,2 ml 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'
)

Databricks runtime 10,1 ml 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 Databricks Runtime 10.4 LTS ML och senare kan du registrera en befintlig Delta-tabell som en funktionstabell. Delta-tabellen måste finnas i metaarkivet.

Anteckning

Om du vill uppdatera en registrerad funktionstabell måste du använda API:et Python Feature Store.

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

Kontrollera åtkomsten till funktionstabeller

Se Kontrollera åtkomsten 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 funktionstabellmetadata:

  • Primärnyckel
  • Partitionsnyckel
  • Namn eller typ av 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 dataramen. 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. Dataramen som returneras av den nya beräkningsfunktionen måste innehålla funktionstabellernas primära nycklar och partitionsnycklar (om det 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 skickas 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 uppdatera funktionstabellen regelbundet, till exempel varje dag. Om du redan har skapat ett icke-schemalagt jobb kan du konvertera det till ett schemalagt jobb för att kontrollera att funktionsvärdena alltid är uppdaterade.

Kod för att uppdatera en funktionstabell använder mode='merge', som du ser 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.

Du kan sedan skapa kod som ska läsas från funktionstabellfiltreringen date till den aktuella tidsperioden. Om du vill 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.

API:et för att läsa metadata för funktionstabeller beror på vilken Databricks körningsversion du använder. Använd med Databricks Runtime 10.2 ML och senareget_table. Använd med Databricks Runtime 10.1 ML och nedanget_feature_table.

Läsa data från en viss tidsstämpel

Databricks funktionstabeller är Delta-tabeller, så du kan hämta funktionsvärden från valfri tidsstämpel.

import datetime
yesterday = datetime.date.today() - datetime.timedelta(days=1)

# read customer_features values from 1 day ago
customer_features_df = fs.read_table(
  name='recommender_system.customer_features',
  as_of_delta_timestamp=str(yesterday)
)

Söka efter och bläddra bland funktionstabeller

Använd funktionsarkivets användargränssnitt för att söka efter eller bläddra bland funktionstabeller.

  1. Klicka på Feature Store IconFunktionsarkiv i sidopanelen för att visa funktionsarkivets användargränssnitt. Den här ikonen visas bara när du är i maskininlärningspersona.

  2. I sökrutan anger du hela eller delar av namnet på en funktionstabell, en funktion eller en datakälla som används för funktionsberäkning. Du kan också ange hela eller delar av nyckeln eller värdet för en tagg. Söktexten är skiftlägeskänslig.

    Följande skärmbild visar ett exempel. Resultatet från sökningen i "age" innehåller en tabell med en funktion age, en tabell med en funktion HouseAgeoch en tabell som baseras på datakällan raw_data.usage_logs.

    Feature search example

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 funktionsarkivet Python API.

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 klickar du på Feature Store IconFunktionsarkiv i sidofältet för att visa användargränssnittet för funktionsarkivet. Den här ikonen visas bara när du är i maskininlärningspersona.

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 funktionsarkivet Python API

I kluster som kör Databricks Runtime 10.5 ML och senare kan du skapa, redigera och ta bort taggar med hjälp av API:et Python Feature Store.

Krav

Databricks Runtime 10.5 ML eller senare

Skapa funktionstabell med tagg med hjälp av Funktionsarkivet Python API

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 API:et Python Feature Store

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

Ta bort en funktionstabell

Det här avsnittet beskriver hur du tar bort en tabell med hjälp av API:et Python Feature Store. Du kan också ta bort en funktionstabell från användargränssnittet.

Anteckning

  • Om du tar bort en funktionstabell kan det leda till oväntade fel hos överordnade producenter och underordnade konsumenter (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.

Krav

Databricks Runtime 10.5 ML eller senare

Ta bort en funktionstabell med funktionsarkivet Python API

Använd 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'
)

Datatyper som stöds

Funktionslager stöder följande PySpark-datatyper:

  • IntegerType
  • FloatType
  • BooleanType
  • StringType
  • DoubleType
  • LongType
  • TimestampType
  • DateType
  • ShortType(Databricks Runtime 9.1 LTS ML och senare)
  • BinaryType(Databricks Runtime 10.1 ML och senare)
  • DecimalType(Databricks Runtime 10.1 ML och senare)
  • ArrayType(Databricks Runtime 9.1 LTS ML och senare)
  • MapType(Databricks Runtime 10.1 ML och senare)

De datatyper som anges ovan stöder funktionstyper som är vanliga i maskininlärningsprogram. Ett exempel:

  • Du kan lagra kompakta vektorer, tensorer och inbäddningar som ArrayType.
  • Du kan lagra glesa vektorer, tensorer och inbäddningar som MapType.
  • Du kan lagra text som StringType.

Användargränssnittet för funktionsarkivet visar metadata för funktionsdatatyper:

Complex data types example

När de publiceras till onlinebutiker ArrayType lagras och MapType funktioner i JSON-format.