Share via


Usare le funzionalità nell'archivio delle funzionalità dell'area di lavoro

Nota

Questa documentazione illustra l'archivio funzionalità dell'area di lavoro. Databricks consiglia di usare Progettazione funzionalità nel catalogo unity. L'archivio delle funzionalità dell'area di lavoro sarà deprecato in futuro.

Questa pagina descrive come creare e usare tabelle delle funzionalità nell'Archivio funzionalità dell'area di lavoro.

Nota

Se l'area di lavoro è abilitata per Unity Catalog, qualsiasi tabella gestita da Unity Catalog con una chiave primaria è automaticamente una tabella delle funzionalità che è possibile usare per il training e l'inferenza del modello. Tutte le funzionalità del catalogo Unity, ad esempio sicurezza, derivazione, assegnazione di tag e accesso tra aree di lavoro, sono automaticamente disponibili per la tabella delle funzionalità. Per informazioni sull'uso delle tabelle delle funzionalità in un'area di lavoro abilitata per il catalogo unity, vedere Progettazione delle funzionalità nel catalogo unity.

Per informazioni sulla derivazione e l'aggiornamento delle funzionalità di rilevamento, vedere Individuare le funzionalità e tenere traccia della derivazione delle funzionalità.

Nota

I nomi di tabelle di database e funzionalità possono contenere solo caratteri alfanumerici e caratteri di sottolineatura (_).

Creare un database per le tabelle delle funzionalità

Prima di creare tabelle di funzionalità, è necessario creare un database per archiviarli.

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

Le tabelle delle funzionalità vengono archiviate come tabelle Delta. Quando si crea una tabella delle funzionalità con create_table (client di Feature Store v0.3.6 e versioni successive) o create_feature_table (v0.3.5 e versioni successive), è necessario specificare il nome del database. Ad esempio, questo argomento crea una tabella Delta denominata customer_features nel database recommender_system.

name='recommender_system.customer_features'

Quando si pubblica una tabella delle funzionalità in un archivio online, la tabella predefinita e il nome del database sono quelli specificati al momento della creazione della tabella; è possibile specificare nomi diversi usando il publish_table metodo .

L'interfaccia utente di Databricks Feature Store mostra il nome della tabella e del database nell'archivio online, insieme ad altri metadati.

Creare una tabella delle funzionalità in Databricks Feature Store

Nota

È anche possibile registrare una tabella Delta esistente come tabella delle funzionalità. Vedere Registrare una tabella Delta esistente come tabella delle funzionalità.

I passaggi di base per la creazione di una tabella delle funzionalità sono:

  1. Scrivere le funzioni Python per calcolare le funzionalità. L'output di ogni funzione deve essere un dataframe Apache Spark con una chiave primaria univoca. La chiave primaria può essere costituita da una o più colonne.
  2. Creare una tabella delle funzionalità creando un'istanza FeatureStoreClient di e usando create_table (v0.3.6 e versioni successive) o create_feature_table (v0.3.5 e versioni successive).
  3. Popolare la tabella delle funzionalità usando write_table.

Per informazioni dettagliate sui comandi e sui parametri usati negli esempi seguenti, vedere le informazioni di riferimento sulle API Python di Feature Store.

V0.3.6 e versioni successive

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 e versioni successive

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

Registrare una tabella Delta esistente come tabella delle funzionalità

Con v0.3.8 e versioni successive, è possibile registrare una tabella Delta esistente come tabella delle funzionalità. La tabella Delta deve esistere nel metastore.

Nota

Per aggiornare una tabella delle funzionalità registrata, è necessario usare l'API Python di Feature Store.

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

Controllare l'accesso alle tabelle delle funzionalità

Vedere Controllare l'accesso alle tabelle delle funzionalità.

Aggiornare una tabella delle funzionalità

È possibile aggiornare una tabella delle funzionalità aggiungendo nuove funzionalità o modificando righe specifiche in base alla chiave primaria.

Non è possibile aggiornare i metadati della tabella delle funzionalità seguenti:

  • Chiave primaria
  • Chiave di partizione
  • Nome o tipo di una funzionalità esistente

Aggiungere nuove funzionalità a una tabella delle funzionalità esistente

È possibile aggiungere nuove funzionalità a una tabella delle funzionalità esistente in uno dei due modi seguenti:

  • Aggiornare la funzione di calcolo delle funzionalità esistente ed eseguire write_table con il dataframe restituito. Questo aggiorna lo schema della tabella delle funzionalità e unisce nuovi valori di funzionalità in base alla chiave primaria.
  • Creare una nuova funzione di calcolo delle funzionalità per calcolare i nuovi valori di funzionalità. Il dataframe restituito da questa nuova funzione di calcolo deve contenere le chiavi primarie e le chiavi di partizione delle tabelle delle funzionalità ,se definite. Eseguire write_table con il dataframe per scrivere le nuove funzionalità nella tabella delle funzionalità esistente usando la stessa chiave primaria.

Aggiornare solo righe specifiche in una tabella delle funzionalità

Usare mode = "merge" in write_table. Le righe la cui chiave primaria non esiste nel dataframe inviato nella write_table chiamata rimangono invariate.

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

Pianificare un processo per aggiornare una tabella delle funzionalità

Per garantire che le funzionalità nelle tabelle delle funzionalità abbiano sempre i valori più recenti, Databricks consiglia di creare un processo che esegue un notebook per aggiornare la tabella delle funzionalità a intervalli regolari, ad esempio ogni giorno. Se è già stato creato un processo non pianificato, è possibile convertirlo in un processo pianificato per assicurarsi che i valori delle funzionalità siano sempre aggiornati.

Il codice per aggiornare una tabella delle funzionalità usa mode='merge', come illustrato nell'esempio seguente.

fs = FeatureStoreClient()

customer_features_df = compute_customer_features(data)

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

Archiviare i valori passati delle funzionalità giornaliere

Definire una tabella delle funzionalità con una chiave primaria composita. Includere la data nella chiave primaria. Ad esempio, per una tabella store_purchasesdelle funzionalità , è possibile usare una chiave primaria composita (date, user_id) e una chiave date di partizione per letture efficienti.

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

È quindi possibile creare codice da leggere dal filtro date della tabella delle funzionalità al periodo di tempo di interesse.

È anche possibile creare una tabella delle funzionalità della serie temporale specificando la date colonna come chiave timestamp usando l'argomento 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'
)

Ciò consente ricerche temporizzato quando si usa create_training_set o score_batch. Il sistema esegue un join as-of-timestamp, usando l'oggetto timestamp_lookup_key specificato.

Per mantenere aggiornata la tabella delle funzionalità, configurare un processo pianificato regolarmente per scrivere funzionalità o trasmettere nuovi valori delle funzionalità nella tabella delle funzionalità.

Creare una pipeline di calcolo delle funzionalità di streaming per aggiornare le funzionalità

Per creare una pipeline di calcolo delle funzionalità di streaming, passare un flusso DataFrame come argomento a write_table. Il metodo restituisce un oggetto StreamingQuery.

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

Leggere da una tabella delle funzionalità

Usare read_table per leggere i valori delle funzionalità.

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

Cercare ed esplorare le tabelle delle funzionalità

Usare l'interfaccia utente di Feature Store per cercare o esplorare le tabelle delle funzionalità.

  1. Nella barra laterale selezionare Machine Learning > Feature Store per visualizzare l'interfaccia utente di Feature Store.

  2. Nella casella di ricerca immettere tutto o parte del nome di una tabella di funzionalità, una funzionalità o un'origine dati usata per il calcolo delle funzionalità. È anche possibile immettere tutto o parte della chiave o del valore di un tag. Il testo di ricerca non fa distinzione tra maiuscole e minuscole.

    Feature search example

Ottenere i metadati della tabella delle funzionalità

L'API per ottenere i metadati della tabella delle funzionalità dipende dalla versione del runtime di Databricks in uso. Con v0.3.6 e versioni successive, usare get_table. Con v0.3.5 e versioni successive, usare 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")

Usare i tag delle tabelle delle funzionalità

I tag sono coppie chiave-valore che è possibile creare e usare per cercare le tabelle delle funzionalità. È possibile creare, modificare ed eliminare tag usando l'interfaccia utente di Feature Store o l'API Python di Feature Store.

Usare i tag di tabella delle funzionalità nell'interfaccia utente

Usare l'interfaccia utente di Feature Store per cercare o esplorare le tabelle delle funzionalità. Per accedere all'interfaccia utente, nella barra laterale selezionare Machine Learning > Feature Store.

Aggiungere un tag usando l'interfaccia utente di Feature Store

  1. Fare clic Tag icon se non è già aperto. Viene visualizzata la tabella dei tag.

    tag table

  2. Fare clic nei campi Nome e Valore e immettere la chiave e il valore per il tag.

  3. Fare clic su Aggiungi.

Modificare o eliminare un tag usando l'interfaccia utente di Feature Store

Per modificare o eliminare un tag esistente, usare le icone nella colonna Azioni .

tag actions

Usare i tag di tabella delle funzionalità usando l'API Python di Feature Store

Nei cluster che eseguono v0.4.1 e versioni successive è possibile creare, modificare ed eliminare tag usando l'API Python di Feature Store.

Requisiti

Client di Feature Store v0.4.1 e versioni successive

Creare una tabella delle funzionalità con tag usando l'API Python di Feature Store

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

Aggiungere, aggiornare ed eliminare tag usando l'API Python di 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")

Aggiornare le origini dati per una tabella delle funzionalità

L'archivio funzionalità tiene traccia automaticamente delle origini dati usate per calcolare le funzionalità. È anche possibile aggiornare manualmente le origini dati usando l'API Python di Feature Store.

Requisiti

Client di Feature Store v0.5.0 e versioni successive

Aggiungere origini dati usando l'API Python di Feature Store

Di seguito sono riportati alcuni comandi di esempio. Per informazioni dettagliate, vedere la documentazione dell'API.

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

Eliminare le origini dati usando l'API Python di Feature Store

Per informazioni dettagliate, vedere la documentazione dell'API.

Nota

Il comando seguente elimina le origini dati di tutti i tipi ("table", "path" e "custom") che corrispondono ai nomi di origine.

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

Eliminare una tabella delle funzionalità

È possibile eliminare una tabella delle funzionalità usando l'interfaccia utente di Feature Store o l'API Python di Feature Store.

Nota

  • L'eliminazione di una tabella di funzionalità può causare errori imprevisti nei producer upstream e nei consumer downstream (modelli, endpoint e processi pianificati). È necessario eliminare gli archivi online pubblicati con il provider di servizi cloud.
  • Quando si elimina una tabella di funzionalità usando l'API, viene eliminata anche la tabella Delta sottostante. Quando si elimina una tabella delle funzionalità dall'interfaccia utente, è necessario eliminare separatamente la tabella Delta sottostante.

Eliminare una tabella delle funzionalità usando l'interfaccia utente

  1. Nella pagina tabella delle funzionalità fare clic Button Down a destra del nome della tabella delle funzionalità e selezionare Elimina. Se non si dispone dell'autorizzazione CAN MANAGE per la tabella delle funzionalità, questa opzione non verrà visualizzata.

    Select delete from drop-down menu

  2. Nella finestra di dialogo Elimina tabella funzionalità fare clic su Elimina per confermare.

  3. Se si vuole eliminare anche la tabella Delta sottostante, eseguire il comando seguente in un notebook.

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

Eliminare una tabella delle funzionalità usando l'API Python di Feature Store

Con il client di Feature Store v0.4.1 e versioni successive, è possibile usare drop_table per eliminare una tabella delle funzionalità. Quando si elimina una tabella con drop_table, viene eliminata anche la tabella Delta sottostante.

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