Práce s funkcí tables v úložišti funkcí Workspace (starší verze)
Poznámka:
Tato dokumentace se zabývá Úložištěm funkcí pro pracovní prostor. Databricks doporučuje používat feature engineering v Unity Catalog. Úložiště funkcí pracovního prostoru bude v budoucnu přestat být podporováno.
Informace o práci s funkcemi tables v Unity Catalognaleznete v tématu Práce s funkcemi tables v Unity Catalog.
Tato stránka popisuje, jak vytvořit a pracovat s vlastností tables v úložišti vlastností pracovního prostoru.
Poznámka:
Pokud je váš pracovní prostor povolený pro Unity Catalog, jakýkoliv table spravovaný pomocí Unity Catalog, který má primární klíč, je automaticky funkce table, kterou můžete použít pro trénování a predikci modelu. Všechny možnosti Catalog Unity, jako je zabezpečení, rodokmen, označování a přístup mezi pracovními prostory, jsou automaticky dostupné pro funkci table. Informace o práci s funkcemi tables v pracovním prostoru s podporou CatalogUnity najdete v tématu Práce s funkcemi tables v Unity Catalog.
Informace o sledování původu a aktuálnosti funkcí najdete v tématu Objevování funkcí a sledování jejich původu v úložišti funkcí pracovního prostoru (starší verze).
Poznámka:
Názvy databází a funkcí table můžou obsahovat pouze alfanumerické znaky a podtržítka (_).
Vytvoření databáze pro funkci tables
Před vytvořením jakékoli funkce tablesje nutné vytvořit databázi k jejich uložení.
%sql CREATE DATABASE IF NOT EXISTS <database-name>
Funkce tables jsou uloženy jako delta tables. Při vytváření funkce table s create_table
(klient úložiště funkcí v0.3.6 a novější) nebo create_feature_table
(v0.3.5 a níže), je nutné zadat název databáze. Například tento argument vytvoří Delta table s názvem customer_features
v databázi recommender_system
.
name='recommender_system.customer_features'
Když publikujete funkci table do online obchodu, výchozí table a název databáze jsou ty, které jsou zadané při vytváření table; pomocí metody publish_table
můžete zadat různé názvy.
Uživatelské rozhraní Databricks Feature Store zobrazuje název table a databázi v online obchodě spolu s dalšími metadaty.
Vytvoření funkce table v úložišti funkcí Databricks
Poznámka:
Můžete také zaregistrovat existující Delta table jako funkci table. Podívejte se na Zaregistrujte existující Delta table jako funkci table.
Základní kroky vytvoření funkce table jsou:
- Napište funkce Pythonu pro výpočet funkcí. Výstupem každé funkce by měl být datový rámec Apache Spark s jedinečným primárním klíčem. Primární klíč se může skládat z jednoho nebo více columns.
- Vytvořte funkci table vytvořením instance
FeatureStoreClient
a použitímcreate_table
(v0.3.6 a novější) nebocreate_feature_table
(v0.3.5 a novější). - Naplňte funkci table pomocí
write_table
.
Podrobnosti o příkazech a parameters použitých v následujících příkladech najdete v referenčních informacích k rozhraní PYTHON API feature store.
V0.3.6 a novější
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 a novější
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'
)
Zaregistrovat existující Delta table jako funkci table
S v0.3.8 a vyššími verzemi můžete zaregistrovat existující Delta table jako funkci table. Rozdílový table musí existovat v metastoru.
Poznámka:
Pokud chcete zaregistrovat update jako funkci table, musíte použít rozhraní Feature Store Python API.
fs.register_table(
delta_table='recommender.customer_features',
primary_keys='customer_id',
description='Customer features'
)
Řízení přístupu k funkci tables
Viz Řízení přístupu k funkcím tables v úložišti funkcí pracovního prostoru (starší verze).
Update funkce table
Můžete update prvek table přidáním nových vlastností nebo úpravou konkrétních řádků na základě primárního klíče.
Následující funkce table metadata nelze aktualizovat:
- Primární klíč
- klíč Partition
- Název nebo typ existující funkce
Přidání nových funkcí do existující funkce table
Nové funkce můžete do existující funkce přidat table jedním ze dvou způsobů:
- Spusťte existující výpočetní funkci Update a spusťte
write_table
s vráceným datovým rámcem. Tato aktualizace se týká funkce tableaschema a sloučí novou funkci values na základě primárního klíče. - Vytvořte novou funkci pro výpočet nové funkce values. Datový rámec vrácený touto novou výpočetní funkcí musí obsahovat primární klíče prvku tablesa klíče partition (pokud jsou definovány). Spuštěním
write_table
s datovým rámcem zapište nové funkce do existujícího tablefunkce pomocí stejného primárního klíče.
Update pouze konkrétní řádky ve funkci table
Použít mode = "merge"
v write_table
. Řádky, jejichž primární klíč v datovém rámci odeslaném write_table
ve volání neexistuje, zůstanou beze změny.
fs.write_table(
name='recommender.customer_features',
df = customer_features_df,
mode = 'merge'
)
Naplánujte úlohu pro update funkci table
Aby funkce ve funkcionalitě tables vždy měly nejnovější values, doporučuje Databricks vytvořit úlohu, která spouští poznámkový blok k update vaší funkcionality table pravidelně, například každý den. Pokud už máte neplánovanou úlohu vytvořenou, můžete ji změnit na naplánovanou úlohu, abyste měli jistotu, že funkce values jsou vždy up-to-date. Viz Plán a orchestrace pracovních postupů.
Kód pro update funkce table používá mode='merge'
, jak je znázorněno v následujícím příkladu.
fs = FeatureStoreClient()
customer_features_df = compute_customer_features(data)
fs.write_table(
df=customer_features_df,
name='recommender_system.customer_features',
mode='merge'
)
Ukládání minulých values denních funkcí
Definujte funkci table složeným primárním klíčem. Zahrňte datum do primárního klíče. Například pro tablestore_purchases
funkce můžete použít složený primární klíč (date
, user_id
) a partition klíč date
pro efektivní čtení.
fs.create_table(
name='recommender_system.customer_features',
primary_keys=['date', 'customer_id'],
partition_columns=['date'],
schema=customer_features_df.schema,
description='Customer features'
)
Pak můžete vytvořit kód pro čtení z funkce table filtrování date
do časového období zájmu.
Funkci časových řad můžete vytvořit také table zadáním date
column jako klíče časového razítka pomocí 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'
)
To umožňuje vyhledávání k určitému bodu v čase při použití create_training_set
nebo score_batch
. Systém provádí as-of časové razítko joinpomocí zadaného timestamp_lookup_key
.
Pokud chcete, aby byla funkce table aktuální, set pravidelně naplánovanou úlohu pro zápis funkcí nebo streamování nových funkcí values do funkce table.
Vytvořit kanál pro výpočet funkcí streamování až do update funkcí
Pokud chcete vytvořit výpočetní kanál funkce streamování, předejte streamování DataFrame
jako argument .write_table
Tato metoda vrátí 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'
)
Čtení z funkce table
Ke čtení funkce valuespoužijte read_table
.
fs = feature_store.FeatureStoreClient()
customer_features_df = fs.read_table(
name='recommender.customer_features',
)
Funkce vyhledávání a procházení tables
Pomocí uživatelského rozhraní úložiště funkcí vyhledejte nebo procházejte funkce tables.
Na bočním panelu klikněte na selectMachine Learning > úložiště funkcí pro zobrazení uživatelského rozhraní úložiště funkcí.
Do vyhledávacího pole zadejte celý název funkce nebo jeho část table, funkci nebo zdroj dat používaný pro výpočet funkce. Můžete také zadat celý klíč nebo část klíče nebo hodnoty značky. Hledaný text nerozlišuje velká a malá písmena.
metadata funkce Gettable
Rozhraní API pro metadata funkce gettable závisí na verzi runtime Databricks, kterou používáte. S v0.3.6 a vyšší použijte get_table
. S v0.3.5 a níže použijte 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")
Pracujte s funkčními značkami table
Značky jsou páry klíčů a hodnot, které můžete vytvořit a použít k hledání funkcí tables. Značky můžete vytvářet, upravovat a odstraňovat pomocí uživatelského rozhraní úložiště funkcí nebo rozhraní Python API úložiště funkcí.
Práce s funkčními značkami table v uživatelském rozhraní
Pomocí uživatelského rozhraní úložiště funkcí vyhledejte nebo procházejte funkce tables. Pokud chcete získat přístup k uživatelskému rozhraní, na bočním panelu selectstrojové učení > úložiště funkcí.
Přidání značky pomocí uživatelského rozhraní úložiště funkcí
Klikněte, pokud ještě není otevřený. Značka table se zobrazí.
Klikněte do polí Název a Hodnota a zadejte klíč a hodnotu značky.
Klikněte na tlačítko Přidat.
Úprava nebo odstranění značky pomocí uživatelského rozhraní úložiště funkcí
Pokud chcete upravit nebo odstranit existující značku, použijte ikony v sekci Akcecolumn.
Práce se značkami funkcí table pomocí rozhraní Python API úložiště funkcí
Na clusterech se systémem v0.4.1 a novějším můžete vytvářet, upravovat a odstraňovat značky pomocí rozhraní Python API úložiště funkcí.
Požadavky
Klient úložiště funkcí verze 0.4.1 a vyšší
Vytvoření prvku table se štítkem pomocí rozhraní Python API 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", ...},
...
)
Přidejte, updatea odstraňte značky pomocí rozhraní Python API 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")
Update zdroje dat pro funkci table
Úložiště funkcí automaticky sleduje zdroje dat používané k výpočetním funkcím. Zdroje dat můžete také ručně update pomocí Python API úložiště funkcí .
Požadavky
Klient úložiště funkcí verze 0.5.0 a vyšší
Přidání zdrojů dat pomocí rozhraní Python API úložiště funkcí
Tady je několik ukázkových příkazů. Podrobnosti najdete v dokumentaci k rozhraní 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")
Odstranění zdrojů dat pomocí rozhraní Python API úložiště funkcí
Podrobnosti najdete v dokumentaci k rozhraní API.
Poznámka:
Následující příkaz odstraní zdroje dat všech typů ("table", path" a "custom"), které odpovídají názvům zdrojů.
from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()
fs.delete_data_sources(feature_table_name="clicks", sources_names="user_info.clicks")
Odstranění funkce table
Funkcionalitu table můžete odstranit pomocí uživatelského rozhraní úložiště vlastností nebo pomocí Python API úložiště vlastností.
Poznámka:
- Odstranění funkce table může vést k neočekávaným chybám u nadřazených výrobců a podřízených příjemců (modelů, koncových bodů a plánovaných úloh). U poskytovatele cloudu musíte odstranit publikovaná online úložiště.
- Když odstraníte funkci table pomocí rozhraní API, odstraní se také základní Delta table. Když odstraníte funkci table z uživatelského rozhraní, musíte samostatně smazat související Delta table.
Odstranění funkce table pomocí uživatelského rozhraní
Na stránce funkce table klikněte na tlačítko vpravo od názvu funkce table a na selectOdstranit. Pokud nemáte oprávnění CAN MANAGE pro funkci table, tato možnost se nezobrazí.
V dialogovém okně Odstranit funkci Table kliknutím na Odstranit potvrďte.
Pokud chcete také vypustit základní Delta , table, spusťte v poznámkovém bloku následující příkaz.
%sql DROP TABLE IF EXISTS <feature-table-name>;
Odstraňte funkci table pomocí Python API Feature Store
Pomocí klienta úložiště funkcí verze 0.4.1 a vyšší můžete pomocí drop_table
odstranit funkci table. Když odstraníte table s drop_table
, odstraní se také podkladový Delta table.
fs.drop_table(
name='recommender_system.customer_features'
)