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:
- 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.
- Utwórz tabelę funkcji, tworząc wystąpienie elementu
FeatureStoreClient
i przy użyciu (create_table
w wersji 0.3.6 lub nowszej) lubcreate_feature_table
(w wersji 0.3.5 lub nowszej). - 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
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_purchases
funkcji 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_table
elementu . 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.
Na pasku bocznym wybierz pozycję > funkcji uczenia maszynowego, aby wyświetlić interfejs użytkownika magazynu funkcji.
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.
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
Kliknij
, jeśli jeszcze nie jest otwarty. Zostanie wyświetlona tabela tagów.
Kliknij pola Nazwa i Wartość, a następnie wprowadź klucz i wartość tagu.
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 .
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
Na stronie tabeli funkcji kliknij
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.
W oknie dialogowym Usuwanie tabeli funkcji kliknij przycisk Usuń , aby potwierdzić.
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_table
powoduje również usunięcie bazowej tabeli delty.
fs.drop_table(
name='recommender_system.customer_features'
)