Udostępnij za pośrednictwem


Praca z tabelami funkcji w sklepie funkcji obszaru roboczego (wersja legacy)

Uwaga

Ta dokumentacja obejmuje Workspace Feature Store. Usługa Databricks zaleca korzystanie z inżynierii funkcji w wykazie aparatu Unity. Magazyn funkcji obszaru roboczego w przyszłości będzie zlikwidowany.

Aby uzyskać informacje na temat pracy z tabelami cech w katalogu Unity, zobacz Praca z tabelami cech w katalogu Unity.

Na tej stronie opisano sposób tworzenia tabel funkcji i pracy z ich użyciem w magazynie funkcji obszaru roboczego.

Uwaga

Jeśli obszar roboczy jest włączony dla wykazu aparatu Unity, każda tabela zarządzana przez wykaz aparatu Unity, która ma klucz podstawowy, jest automatycznie tabelą funkcji, której można użyć do trenowania i wnioskowania modelu. Wszystkie funkcje wykazu aparatu Unity, takie jak zabezpieczenia, pochodzenie, tagowanie i dostęp między obszarami roboczymi, są automatycznie dostępne dla tabeli funkcji. Aby uzyskać informacje na temat pracy z tabelami cech w obszarze roboczym z włączonym Unity Catalog, zapoznaj się z Praca z tabelami cech w Unity Catalog.

Aby uzyskać informacje na temat śledzenia pochodzenia funkcji i aktualności, zobacz Odnajdywanie funkcji i śledzenie pochodzenia funkcji w magazynie funkcji obszaru roboczego (starsza wersja).

Uwaga

Nazwy tabel baz danych i funkcji mogą zawierać tylko znaki alfanumeryczne i podkreślenia (_).

Tworzenie bazy danych dla tabel funkcji

Przed utworzeniem tabel funkcji należy utworzyć bazę danych, aby je przechowywać.

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

Tabele funkcji są przechowywane jako tabele delty. Podczas tworzenia tabeli funkcji z create_table programem (klient magazynu funkcji w wersji 0.3.6 lub nowszej) lub create_feature_table (w wersji 0.3.5 lub nowszej) należy określić nazwę bazy danych. Na przykład ten argument tworzy tabelę delty o nazwie customer_features w bazie danych recommender_system.

name='recommender_system.customer_features'

Podczas publikowania tabeli funkcji w sklepie online domyślna nazwa tabeli i bazy danych to te określone podczas tworzenia tabeli; Można określić różne nazwy przy użyciu publish_table metody .

Interfejs użytkownika magazynu funkcji usługi Databricks zawiera nazwę tabeli i bazy danych w magazynie online wraz z innymi metadanymi.

Tworzenie tabeli funkcji w magazynie funkcji usługi Databricks

Uwaga

Możesz również zarejestrować istniejącą tabelę delty jako tabelę funkcji. Zobacz Rejestrowanie istniejącej tabeli delty jako tabeli funkcji.

Podstawowe kroki tworzenia tabeli funkcji to:

  1. Napisz funkcje języka Python, aby obliczyć funkcje. Dane wyjściowe każdej funkcji powinny być ramką danych platformy Apache Spark z unikatowym kluczem podstawowym. Klucz podstawowy może składać się z co najmniej jednej kolumny.
  2. Utwórz tabelę funkcji, tworząc wystąpienie elementu FeatureStoreClient i przy użyciu ( create_table w wersji 0.3.6 lub nowszej) lub create_feature_table (w wersji 0.3.5 lub nowszej).
  3. Wypełnij tabelę funkcji przy użyciu polecenia write_table.

Aby uzyskać szczegółowe informacje na temat poleceń i parametrów używanych w poniższych przykładach, zobacz dokumentację interfejsu API języka Python magazynu funkcji.

Wersja 0.3.6 lub nowsze

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

Wersja 0.3.5 i starsze

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

Rejestrowanie istniejącej tabeli delty jako tabeli funkcji

W wersji 0.3.8 lub nowszej można zarejestrować istniejącą tabelę delty jako tabelę funkcji. Tabela delta musi istnieć w magazynie metadanych.

Uwaga

Aby zaktualizować zarejestrowaną tabelę funkcji, należy użyć interfejsu API języka Python magazynu funkcji.

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

Kontrolowanie dostępu do tabel funkcji

Zobacz Kontrola dostępu do tabel funkcyjnych w magazynie funkcji obszaru roboczego Workspace (starsza wersja).

Aktualizowanie tabeli funkcji

Tabelę funkcji można zaktualizować, dodając nowe funkcje lub modyfikując określone wiersze na podstawie klucza podstawowego.

Nie można zaktualizować następujących metadanych tabeli funkcji:

  • Klucz podstawowy
  • Klucz partycji
  • Nazwa lub typ istniejącej funkcji

Dodawanie nowych funkcji do istniejącej tabeli funkcji

Nowe funkcje można dodać do istniejącej tabeli funkcji na jeden z dwóch sposobów:

  • Zaktualizuj istniejącą funkcję obliczeniową funkcji i uruchom polecenie write_table za pomocą zwróconej ramki danych. Spowoduje to zaktualizowanie schematu tabeli funkcji i scalanie nowych wartości funkcji na podstawie klucza podstawowego.
  • Utwórz nową funkcję obliczeniową funkcji, aby obliczyć nowe wartości funkcji. Ramka danych zwracana przez tę nową funkcję obliczeniową musi zawierać klucze podstawowe tabel funkcji i klucze partycji (jeśli zdefiniowano). Uruchom polecenie write_table z ramą danych, aby zapisać nowe funkcje w istniejącej tabeli funkcji przy użyciu tego samego klucza podstawowego.

Aktualizowanie tylko określonych wierszy w tabeli funkcji

Użyj mode = "merge" polecenia w pliku write_table. Wiersze, których klucz podstawowy nie istnieje w ramce danych wysłanej write_table w wywołaniu, pozostają niezmienione.

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

Planowanie zadania w celu zaktualizowania tabeli funkcji

Aby zapewnić, że funkcje w tabelach funkcji zawsze mają najnowsze wartości, usługa Databricks zaleca utworzenie zadania, które uruchamia notes w celu regularnego aktualizowania tabeli funkcji, na przykład codziennie. Jeśli masz już utworzone nieplanowane zadanie, możesz przekonwertować je na zaplanowane zadanie, aby upewnić się, że wartości funkcji są zawsze aktualne. Zobacz Omówienie orkiestracji w usłudze Databricks.

Kod aktualizowania tabeli funkcji używa metody mode='merge', jak pokazano w poniższym przykładzie.

fs = FeatureStoreClient()

customer_features_df = compute_customer_features(data)

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

Przechowywanie poprzednich wartości codziennych funkcji

Zdefiniuj tabelę funkcji przy użyciu złożonego klucza podstawowego. Uwzględnij datę w kluczu podstawowym. Na przykład w przypadku tabeli store_purchasesfunkcji można użyć złożonego klucza podstawowego (date, user_id) i klucza date partycji do wydajnego odczytu.

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

Następnie możesz utworzyć kod do odczytu z filtrowania date tabeli funkcji do okresu zainteresowania.

Tabelę funkcji szeregów czasowych można również utworzyć, określając date kolumnę jako klucz znacznika czasu przy użyciu argumentu 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'
)

Umożliwia to wyszukiwanie do punktu w czasie w przypadku korzystania z funkcji create_training_set lub score_batch. System wykonuje sprzężenia znacznika czasu jako sygnaturę czasową przy użyciu określonego elementu timestamp_lookup_key .

Aby zachować aktualność tabeli funkcji, skonfiguruj regularnie zaplanowane zadanie pisania funkcji lub przesyłaj strumieniowo nowe wartości funkcji do tabeli funkcji.

Tworzenie potoku obliczeń funkcji przesyłania strumieniowego w celu zaktualizowania funkcji

Aby utworzyć potok obliczeń funkcji przesyłania strumieniowego, przekaż przesyłanie strumieniowe DataFrame jako argument do write_tableelementu . Ta metoda zwraca StreamingQuery obiekt.

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

Odczytywanie z tabeli funkcji

Użyj read_table polecenia , aby odczytać wartości funkcji.

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

Wyszukiwanie i przeglądanie tabel funkcji

Użyj interfejsu użytkownika magazynu funkcji, aby wyszukać lub przeglądać tabele funkcji.

  1. Na pasku bocznym wybierz pozycję > funkcji uczenia maszynowego, aby wyświetlić interfejs użytkownika magazynu funkcji.

  2. W polu wyszukiwania wprowadź całą lub część nazwy tabeli funkcji, funkcji lub źródła danych używanego do obliczeń funkcji. Możesz również wprowadzić wszystkie lub część klucza lub wartości tagu. Tekst wyszukiwania jest niewrażliwy na wielkość liter.

    Przykład wyszukiwania funkcji

Pobieranie metadanych tabeli funkcji

Interfejs API do pobierania metadanych tabeli funkcji zależy od używanej wersji środowiska uruchomieniowego usługi Databricks. W przypadku wersji 0.3.6 lub nowszej użyj polecenia get_table. W przypadku wersji 0.3.5 lub starszej użyj polecenia 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")

Praca z tagami tabeli funkcji

Tagi to pary klucz-wartość, które można utworzyć i użyć do wyszukiwania tabel funkcji. Tagi można tworzyć, edytować i usuwać przy użyciu interfejsu użytkownika magazynu funkcji lub interfejsu API języka Python magazynu funkcji.

Praca z tagami tabeli funkcji w interfejsie użytkownika

Użyj interfejsu użytkownika magazynu funkcji, aby wyszukać lub przeglądać tabele funkcji. Aby uzyskać dostęp do interfejsu użytkownika, na pasku bocznym wybierz pozycję > funkcji usługi Machine Learning.

Dodawanie tagu przy użyciu interfejsu użytkownika magazynu funkcji

  1. Kliknij Ikona tagu , jeśli jeszcze nie jest otwarty. Zostanie wyświetlona tabela tagów.

    tabela tagów

  2. Kliknij pola Nazwa i Wartość, a następnie wprowadź klucz i wartość tagu.

  3. Kliknij przycisk Dodaj.

Edytowanie lub usuwanie tagu przy użyciu interfejsu użytkownika magazynu funkcji

Aby edytować lub usunąć istniejący tag, użyj ikon w kolumnie Akcje .

akcje tagu

Praca z tagami tabel funkcji przy użyciu interfejsu API języka Python magazynu funkcji

W klastrach z systemem w wersji 0.4.1 lub nowszej można tworzyć, edytować i usuwać tagi przy użyciu interfejsu API języka Python magazynu funkcji.

Wymagania

Klient magazynu funkcji w wersji 0.4.1 lub nowszej

Tworzenie tabeli funkcji z tagiem przy użyciu interfejsu API języka Python magazynu funkcji

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

Dodawanie, aktualizowanie i usuwanie tagów przy użyciu interfejsu API języka Python magazynu funkcji

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

Aktualizowanie źródeł danych dla tabeli funkcji

Magazyn funkcji automatycznie śledzi źródła danych używane do obliczeń. Źródła danych można również zaktualizować ręcznie przy użyciu interfejsu API języka Python magazynu funkcji.

Wymagania

Klient magazynu funkcji w wersji 0.5.0 lub nowszej

Dodawanie źródeł danych przy użyciu interfejsu API języka Python magazynu funkcji

Poniżej przedstawiono kilka przykładowych poleceń. Aby uzyskać szczegółowe informacje, zobacz dokumentację interfejsu 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")

Usuwanie źródeł danych przy użyciu interfejsu API języka Python magazynu funkcji

Aby uzyskać szczegółowe informacje, zobacz dokumentację interfejsu API.

Uwaga

Następujące polecenie usuwa źródła danych wszystkich typów ("table", "path" i "custom"), które są zgodne z nazwami źródłowymi.

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

Usuwanie tabeli funkcji

Tabelę funkcji można usunąć przy użyciu interfejsu użytkownika magazynu funkcji lub interfejsu API języka Python magazynu funkcji.

Uwaga

  • Usunięcie tabeli funkcji może prowadzić do nieoczekiwanych błędów u producentów nadrzędnych i odbiorców podrzędnych (modeli, punktów końcowych i zaplanowanych zadań). Musisz usunąć opublikowane sklepy online u dostawcy usług w chmurze.
  • Usunięcie tabeli funkcji przy użyciu interfejsu API powoduje również usunięcie bazowej tabeli delty. Po usunięciu tabeli funkcji z interfejsu użytkownika należy oddzielnie usunąć podstawową tabelę delty.

Usuwanie tabeli funkcji przy użyciu interfejsu użytkownika

  1. Na stronie tabeli funkcji kliknij Przycisk strzałki w dół po prawej stronie nazwy tabeli funkcji i wybierz pozycję Usuń. Jeśli nie masz uprawnień CAN MANAGE dla tabeli funkcji, ta opcja nie będzie widoczna.

    Wybierz pozycję Usuń z menu rozwijanego

  2. W oknie dialogowym Usuwanie tabeli funkcji kliknij przycisk Usuń , aby potwierdzić.

  3. Jeśli chcesz również usunąć podstawową tabelę delty, uruchom następujące polecenie w notesie.

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

Usuwanie tabeli funkcji przy użyciu interfejsu API języka Python magazynu funkcji

W przypadku klienta magazynu funkcji w wersji 0.4.1 lub nowszej można użyć drop_table polecenia , aby usunąć tabelę funkcji. Usunięcie tabeli z tabelą drop_tablepowoduje również usunięcie bazowej tabeli delty.

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