Práce s tabulkami funkcí v katalogu Unity
Tato stránka popisuje, jak vytvořit tabulky funkcí a pracovat s tabulkami funkcí v katalogu Unity.
Tato stránka se vztahuje pouze na pracovní prostory, které jsou povolené pro katalog Unity. Pokud váš pracovní prostor není povolen pro katalog Unity, přečtěte si téma Práce s tabulkami funkcionalit v úložišti funkcionalit pracovního prostoru (starší verze).
Požadavky
Příprava funkcí v katalogu Unity vyžaduje Databricks Runtime 13.2 nebo vyšší. Metastore katalogu Unity navíc musí mít model oprávnění verze 1.0.
Instalace přípravy funkcí v klientovi Python katalogu Unity
Příprava funkcí v katalogu Unity má klienta FeatureEngineeringClient
Pythonu . Třída je k dispozici v PyPI s balíčkem databricks-feature-engineering
a je předinstalovaná v Databricks Runtime 13.3 LTS ML a vyšší. Pokud používáte modul runtime databricks bez ML, musíte klienta nainstalovat ručně. Pomocí matice kompatibility vyhledejte správnou verzi pro vaši verzi Databricks Runtime.
%pip install databricks-feature-engineering
dbutils.library.restartPython()
Vytvoření katalogu a schématu pro tabulky funkcí v katalogu Unity
Musíte vytvořit nový katalog nebo použít existující katalog pro tabulky funkcí.
Pokud chcete vytvořit nový katalog, musíte mít CREATE CATALOG
oprávnění k metastoru.
CREATE CATALOG IF NOT EXISTS <catalog-name>
Pokud chcete použít existující katalog, musíte mít USE CATALOG
oprávnění k katalogu.
USE CATALOG <catalog-name>
Tabulky funkcí v katalogu Unity musí být uložené ve schématu. Pokud chcete vytvořit nové schéma v katalogu, musíte mít CREATE SCHEMA
oprávnění k katalogu.
CREATE SCHEMA IF NOT EXISTS <schema-name>
Vytvoření tabulky funkcí v katalogu Unity
Poznámka:
Jako tabulku funkcí můžete použít existující tabulku Delta v katalogu Unity, která obsahuje omezení primárního klíče. Pokud tabulka nemá definovaný primární klíč, musíte tabulku aktualizovat pomocí ALTER TABLE
příkazů DDL a přidat omezení. Viz Použití existující tabulky Delta v Katalogu Unity jako tabulky funkcí.
Přidání primárního klíče do streamované tabulky nebo materializovaného zobrazení publikovaného v katalogu Unity kanálem Delta Live Tables vyžaduje úpravu schématu streamované tabulky nebo materializované definice zobrazení tak, aby zahrnovala primární klíč a pak aktualizovala streamovanou tabulku nebo materializované zobrazení. Viz Použití streamované tabulky nebo materializovaného zobrazení vytvořeného kanálem Delta Live Tables jako tabulkou funkcí.
Tabulky funkcí v katalogu Unity jsou tabulky Delta. Tabulky funkcí musí mít primární klíč. Tabulky funkcí, jako jsou jiné datové prostředky v katalogu Unity, jsou přístupné pomocí tříúrovňového oboru názvů: <catalog-name>.<schema-name>.<table-name>
.
K vytváření tabulek funkcí v katalogu Unity můžete použít Databricks SQL, Python FeatureEngineeringClient
nebo kanál Delta Live Tables.
Databricks SQL
Jako tabulku funkcí můžete použít libovolnou tabulku Delta s omezením primárního klíče. Následující kód ukazuje, jak vytvořit tabulku s primárním klíčem:
CREATE TABLE ml.recommender_system.customer_features (
customer_id int NOT NULL,
feat1 long,
feat2 varchar(100),
CONSTRAINT customer_features_pk PRIMARY KEY (customer_id)
);
Pokud chcete vytvořit tabulku funkcí časových řad, přidejte sloupec času jako sloupec primárního klíče a zadejte klíčové slovo TIMESERIES . Klíčové slovo TIMESERIES vyžaduje Databricks Runtime 13.3 LTS nebo vyšší.
CREATE TABLE ml.recommender_system.customer_features (
customer_id int NOT NULL,
ts timestamp NOT NULL,
feat1 long,
feat2 varchar(100),
CONSTRAINT customer_features_pk PRIMARY KEY (customer_id, ts TIMESERIES)
);
Po vytvoření tabulky můžete do ní zapisovat data jako jiné tabulky Delta a dají se použít jako tabulka funkcí.
Python
Podrobnosti o příkazech a parametrech použitých v následujících příkladech najdete v referenčních informacích k rozhraní API Pythonu pro přípravu funkcí.
- 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 sloupců.
- Vytvořte tabulku funkcí vytvořením instance a
FeatureEngineeringClient
použitícreate_table
. - Naplňte tabulku funkcí pomocí
write_table
funkce .
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
# Prepare feature DataFrame
def compute_customer_features(data):
''' Feature computation code returns a DataFrame with 'customer_id' as primary key'''
pass
customer_features_df = compute_customer_features(df)
# Create feature table with `customer_id` as the primary key.
# Take schema from DataFrame output by compute_customer_features
customer_feature_table = fe.create_table(
name='ml.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 = fe.create_table(
# ...
# df=customer_features_df,
# ...
# )
# To use a composite primary key, pass all primary key columns in the create_table call
# customer_feature_table = fe.create_table(
# ...
# primary_keys=['customer_id', 'date'],
# ...
# )
# To create a time series table, set the timeseries_columns argument
# customer_feature_table = fe.create_table(
# ...
# primary_keys=['customer_id', 'date'],
# timeseries_columns='date',
# ...
# )
Vytvoření tabulky funkcí v katalogu Unity s kanálem Delta Live Tables
Poznámka:
Podpora tabulek Delta Live Tables je ve verzi Public Preview. Následující příklady kódu musí být spuštěny pomocí kanálu náhledu Delta Live Tables.
Jakoukoli tabulku publikovanou z kanálu Delta Live Tables, která obsahuje omezení primárního klíče, lze použít jako tabulku funkcí. Pokud chcete vytvořit tabulku v kanálu Delta Live Tables s primárním klíčem, můžete použít buď Databricks SQL, nebo programovací rozhraní Delta Live Tables Python.
Pokud chcete vytvořit tabulku v kanálu Delta Live Tables s primárním klíčem, použijte následující syntaxi:
Databricks SQL
CREATE LIVE TABLE customer_features (
customer_id int NOT NULL,
feat1 long,
feat2 varchar(100),
CONSTRAINT customer_features_pk PRIMARY KEY (customer_id)
) AS SELECT * FROM ...;
Python
import dlt
@dlt.table(
schema="""
customer_id int NOT NULL,
feat1 long,
feat2 varchar(100),
CONSTRAINT customer_features_pk PRIMARY KEY (customer_id)
""")
def customer_features():
return ...
Pokud chcete vytvořit tabulku funkcí časových řad, přidejte sloupec času jako sloupec primárního klíče a zadejte klíčové slovo TIMESERIES .
Databricks SQL
CREATE LIVE TABLE customer_features (
customer_id int NOT NULL,
ts timestamp NOT NULL,
feat1 long,
feat2 varchar(100),
CONSTRAINT customer_features_pk PRIMARY KEY (customer_id, ts TIMESERIES)
) AS SELECT * FROM ...;
Python
import dlt
@dlt.table(
schema="""
customer_id int NOT NULL,
ts timestamp NOT NULL,
feat1 long,
feat2 varchar(100),
CONSTRAINT customer_features_pk PRIMARY KEY (customer_id, ts TIMESERIES)
""")
def customer_features():
return ...
Po vytvoření tabulky můžete do ní zapisovat data jako jiné datové sady Delta Live Tables a dají se použít jako tabulka funkcí.
Použití existující tabulky Delta v katalogu Unity jako tabulky funkcí
Libovolná tabulka Delta v katalogu Unity s primárním klíčem může být tabulka funkcí v katalogu Unity a s tabulkou můžete použít uživatelské rozhraní Funkcí a rozhraní API.
Poznámka:
- Omezení primárního klíče může deklarovat pouze vlastník tabulky. Jméno vlastníka se zobrazí na stránce podrobností tabulky v Průzkumníku katalogu.
- Ověřte, že je datový typ v tabulce Delta podporován technikou funkcí v katalogu Unity. Viz Podporované datové typy.
- Klíčové slovo TIMESERIES vyžaduje Databricks Runtime 13.3 LTS nebo vyšší.
Pokud existující tabulka Delta nemá omezení primárního klíče, můžete ji vytvořit následujícím způsobem:
Nastavte sloupce primárního klíče na
NOT NULL
hodnotu . Pro každý sloupec primárního klíče spusťte:ALTER TABLE <full_table_name> ALTER COLUMN <pk_col_name> SET NOT NULL
Upravte tabulku tak, aby přidala omezení primárního klíče:
ALTER TABLE <full_table_name> ADD CONSTRAINT <pk_name> PRIMARY KEY(pk_col1, pk_col2, ...)
pk_name
je název omezení primárního klíče. Podle konvence můžete použít název tabulky (bez schématu a katalogu) s příponou_pk
. Například tabulka s názvem"ml.recommender_system.customer_features"
by mělacustomer_features_pk
název omezení primárního klíče.Pokud chcete vytvořit tabulku funkcí časové řady, zadejte klíčové slovo TIMESERIES na jednom ze sloupců primárního klíče následujícím způsobem:
ALTER TABLE <full_table_name> ADD CONSTRAINT <pk_name> PRIMARY KEY(pk_col1 TIMESERIES, pk_col2, ...)
Po přidání omezení primárního klíče do tabulky se tabulka zobrazí v uživatelském rozhraní funkce a můžete ji použít jako tabulku funkcí.
Použití streamované tabulky nebo materializovaného zobrazení vytvořeného kanálem Delta Live Tables jako tabulky funkcí
Jakákoli streamovaná tabulka nebo materializované zobrazení v katalogu Unity s primárním klíčem může být tabulka funkcí v katalogu Unity a můžete použít uživatelské rozhraní Funkcí a rozhraní API s tabulkou.
Poznámka:
- Podpora tabulek Delta Live Tables je ve verzi Public Preview. Následující příklady kódu musí být spuštěny pomocí kanálu náhledu Delta Live Tables.
- Omezení primárního klíče může deklarovat pouze vlastník tabulky. Jméno vlastníka se zobrazí na stránce podrobností tabulky v Průzkumníku katalogu.
- Ověřte, že technologie funkcí v katalogu Unity podporuje datový typ v tabulce Delta. Viz Podporované datové typy.
Pokud chcete nastavit primární klíče pro existující streamovanou tabulku nebo materializované zobrazení, aktualizujte schéma streamované tabulky nebo materializovaného zobrazení v poznámkovém bloku, které objekt spravuje. Potom aktualizujte tabulku, aby se aktualizoval objekt katalogu Unity.
Následuje syntaxe pro přidání primárního klíče do materializovaného zobrazení:
Databricks SQL
CREATE OR REFRESH MATERIALIZED VIEW existing_live_table(
id int NOT NULL PRIMARY KEY,
...
) AS SELECT ...
Python
import dlt
@dlt.table(
schema="""
id int NOT NULL PRIMARY KEY,
...
"""
)
def existing_live_table():
return ...
Použít existující zobrazení v katalogu Unity jako tabulku funkcí
Pokud chcete použít zobrazení jako tabulku funkcí, musíte použít databricks-feature-engineering
verze 0.7.0 nebo vyšší, která je integrovaná do Databricks Runtime 16.0 ML.
Jednoduché zobrazení SELECT v katalogu Unity může fungovat jako tabulka vlastností v katalogu Unity a můžete s ní použít rozhraní API pro vlastnosti.
Poznámka:
- Jednoduché zobrazení SELECT je definováno jako zobrazení vytvořené z jedné tabulky Delta v katalogu Unity, které lze použít jako tabulku funkcí a jejíž primární klíče jsou vybrány bez klauzule JOIN, GROUP BY nebo DISTINCT. Přijatelná klíčová slova v příkazu SQL jsou SELECT, FROM, WHERE, ORDER BY, LIMIT a OFFSET.
- Viz podporované datové typy pro typ podporovaných dat.
- Tabulky funkcí podporované zobrazeními se nezobrazují v uživatelském rozhraní funkcí.
- Pokud jsou sloupce přejmenovány ve zdrojové tabulce Delta, sloupce v příkazu SELECT pro definici zobrazení musí být přejmenovány tak, aby odpovídaly.
Tady je příklad jednoduchého zobrazení SELECT, které lze použít jako tabulku funkcí:
CREATE OR REPLACE VIEW ml.recommender_system.content_recommendation_subset AS
SELECT
user_id,
content_id,
user_age,
user_gender,
content_genre,
content_release_year,
user_content_watch_duration,
user_content_like_dislike_ratio
FROM
ml.recommender_system.content_recommendations_features
WHERE
user_age BETWEEN 18 AND 35
AND content_genre IN ('Drama', 'Comedy', 'Action')
AND content_release_year >= 2010
AND user_content_watch_duration > 60;
Tabulky funkcí založené na zobrazeních je možné použít k trénování a vyhodnocení offline modelu. Nelze je publikovat do online obchodů. Funkce z těchto tabulek a modelů založených na těchto funkcích nelze obsluhovat.
Aktualizace tabulky funkcí v katalogu Unity
Tabulku funkcí v katalogu Unity můžete aktualizovat přidáním nových funkcí nebo úpravou konkrétních řádků na základě primárního klíče.
Následující metadata tabulky funkcí by se neměla aktualizovat:
- Primární klíč.
- Klíč oddílu.
- Název nebo datový typ existující funkce
Změna způsobí přerušení podřízených kanálů, které používají funkce pro trénování a obsluhu modelů.
Přidání nových funkcí do existující tabulky funkcí v katalogu Unity
Nové funkce můžete do existující tabulky funkcí přidat jedním ze dvou způsobů:
- Aktualizujte stávající výpočetní funkci funkce a spusťte
write_table
vrácený datový rámec. Tím se aktualizuje schéma tabulky funkcí a sloučí se nové hodnoty funkcí na základě primárního klíče. - Vytvořte novou výpočetní funkci funkce pro výpočet nových hodnot funkcí. Datový rámec vrácený touto novou výpočetní funkcí musí obsahovat primární a oddílové klíče tabulek funkcí (pokud jsou definovány). Spuštěním
write_table
datového rámce zapište nové funkce do existující tabulky funkcí pomocí stejného primárního klíče.
Aktualizace pouze konkrétních řádků v tabulce funkcí
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.
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
fe.write_table(
name='ml.recommender_system.customer_features',
df = customer_features_df,
mode = 'merge'
)
Naplánování úlohy pro aktualizaci tabulky funkcí
Aby funkce v tabulkách funkcí vždy měly nejnovější hodnoty, doporučuje Databricks vytvořit úlohu, která spouští poznámkový blok, aby pravidelně aktualizovala tabulku funkcí, například každý den. Pokud už máte neplánovaná úloha vytvořená, můžete ji převést na naplánovanou úlohu, abyste zajistili, že hodnoty funkcí budou vždy aktuální. Viz Plán a orchestrace pracovních postupů.
Kód pro aktualizaci tabulky funkcí používá mode='merge'
, jak je znázorněno v následujícím příkladu.
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
customer_features_df = compute_customer_features(data)
fe.write_table(
df=customer_features_df,
name='ml.recommender_system.customer_features',
mode='merge'
)
Ukládání minulých hodnot denních funkcí
Definujte tabulku funkcí se složeným primárním klíčem. Zahrňte datum do primárního klíče. Například pro tabulku customer_features
funkcí můžete pro efektivní čtení použít složený primární klíč (date
, customer_id
) a klíč date
oddílu.
Databricks doporučuje povolit clustering liquid v tabulce pro efektivní čtení. Pokud nepoužíváte clustering liquid, nastavte sloupec kalendářních dat jako klíč oddílu pro lepší výkon čtení.
Databricks SQL
CREATE TABLE ml.recommender_system.customer_features (
customer_id int NOT NULL,
`date` date NOT NULL,
feat1 long,
feat2 varchar(100),
CONSTRAINT customer_features_pk PRIMARY KEY (`date`, customer_id)
)
-- If you are not using liquid clustering, uncomment the following line.
-- PARTITIONED BY (`date`)
COMMENT "Customer features";
Python
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
fe.create_table(
name='ml.recommender_system.customer_features',
primary_keys=['date', 'customer_id'],
# If you are not using liquid clustering, uncomment the following line.
# partition_columns=['date'],
schema=customer_features_df.schema,
description='Customer features'
)
Pak můžete vytvořit kód pro čtení z filtrování date
tabulky funkcí do časového období zájmu.
Můžete také vytvořit tabulku funkcí časových řad, která umožňuje vyhledávání k určitému bodu v čase při použití create_training_set
nebo score_batch
. Viz Vytvoření tabulky funkcí v katalogu Unity.
Pokud chcete tabulku funkcí udržovat v aktualizovaném stavu, nastavte pravidelně naplánovanou úlohu pro zápis funkcí nebo streamování nových hodnot funkcí do tabulky funkcí.
Vytvoření výpočetního kanálu funkce streamování pro aktualizaci 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
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
customer_transactions = spark.readStream.table("prod.events.customer_transactions")
stream_df = compute_additional_customer_features(customer_transactions)
fe.write_table(
df=stream_df,
name='ml.recommender_system.customer_features',
mode='merge'
)
Čtení z tabulky funkcí v katalogu Unity
Slouží read_table
ke čtení hodnot funkcí.
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
customer_features_df = fe.read_table(
name='ml.recommender_system.customer_features',
)
Vyhledávání a procházení tabulek funkcí v katalogu Unity
Pomocí uživatelského rozhraní funkcí můžete vyhledávat nebo procházet tabulky funkcí v katalogu Unity.
Kliknutím na Funkce na bočním panelu zobrazíte uživatelské rozhraní funkcí.
Výběrem katalogu selektorem katalogu zobrazíte všechny dostupné tabulky funkcí v daném katalogu. Do vyhledávacího pole zadejte celý název tabulky funkcí, funkce nebo komentář nebo jeho část. Můžete také zadat celý klíč nebo část klíče nebo hodnoty značky. Hledaný text nerozlišuje velká a malá písmena.
Získání metadat tabulek funkcí v katalogu Unity
Slouží get_table
k získání metadat tabulky funkcí.
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
ft = fe.get_table(name="ml.recommender_system.user_feature_table")
print(ft.features)
Použití značek s tabulkami funkcí a funkcemi v katalogu Unity
Značky, které jsou jednoduché páry klíč-hodnota, můžete použít ke kategorizaci a správě tabulek a funkcí funkcí.
V případě tabulek funkcí můžete vytvářet, upravovat a odstraňovat značky pomocí Průzkumníka katalogu, příkazů SQL v poznámkovém bloku nebo editoru dotazů SQL nebo rozhraní PYTHON API pro přípravu funkcí.
U funkcí můžete vytvářet, upravovat a odstraňovat značky pomocí Průzkumníka katalogu nebo příkazů SQL v poznámkovém bloku nebo editoru dotazů SQL.
Viz Použití značek na zabezpečitelné objekty katalogu Unity a rozhraní PYTHON API pro přípravu funkcí a úložiště funkcí pracovního prostoru.
Následující příklad ukazuje, jak pomocí rozhraní API Pythonu pro přípravu funkcí vytvářet, aktualizovat a odstraňovat značky tabulek funkcí.
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
# Create feature table with tags
customer_feature_table = fe.create_table(
# ...
tags={"tag_key_1": "tag_value_1", "tag_key_2": "tag_value_2", ...},
# ...
)
# Upsert a tag
fe.set_feature_table_tag(name="customer_feature_table", key="tag_key_1", value="new_key_value")
# Delete a tag
fe.delete_feature_table_tag(name="customer_feature_table", key="tag_key_2")
Odstranění tabulky funkcí v katalogu Unity
Tabulku funkcí v katalogu Unity můžete odstranit přímo odstraněním tabulky Delta v katalogu Unity pomocí Průzkumníka katalogu nebo pomocí rozhraní Python API pro přípravu funkcí.
Poznámka:
- Odstranění tabulky funkcí může vést k neočekávaným chybám v nadřazených producentech a podřízených konzumentech (modely, koncové body a plánované úlohy). U poskytovatele cloudu musíte odstranit publikovaná online úložiště.
- Když odstraníte tabulku funkcí v katalogu Unity, odstraní se také podkladová tabulka Delta.
-
drop_table
Databricks Runtime 13.1 ML nebo níže se nepodporuje. K odstranění tabulky použijte příkaz SQL.
Databricks SQL nebo FeatureEngineeringClient.drop_table
můžete odstranit tabulku funkcí v katalogu Unity:
Databricks SQL
DROP TABLE ml.recommender_system.customer_features;
Python
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
fe.drop_table(
name='ml.recommender_system.customer_features'
)
Sdílení tabulky funkcí v katalogu Unity napříč pracovními prostory nebo účty
Tabulka funkcí v katalogu Unity je přístupná pro všechny pracovní prostory přiřazené metastorem katalogu Unity tabulky.
Pokud chcete sdílet tabulku funkcí s pracovními prostory, které nejsou přiřazené ke stejnému metastoru katalogu Unity, použijte funkci Delta Sharing.