Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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).
Pro podrobnosti o příkazech a parametrech použitých v příkladech na této stránce, vizte referenci API pro práci s funkcemi v Pythonu.
Požadavky
Inženýrství funkcí v rámci 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.
Nainstalujte Feature Engineering v Python klientovi katalogu Unity
Úprava vlastností v Unity katalogu má Pythonový klient FeatureEngineeringClient
. 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 Databricks Runtime bez strojového učení (ne-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 streamovací tabulky nebo materializovaného zobrazení publikovaných v rámci katalogu Unity firmou Lakeflow deklarativní pipeline však vyžaduje úpravu schématu streamovací tabulky nebo definice materializovaného zobrazení tak, aby zahrnovala primární klíč, a následně aktualizaci streamovací tabulky nebo materializovaného zobrazení. Viz Použití tabulky streamování nebo materializovaného zobrazení vytvořeného deklarativními kanály Lakeflow jako tabulky funkcí.
Tabulky funkcí v katalogu Unity jsou tabulky Delta. Tabulky funkcí musí mít primární klíč. Tabulky vlastností, stejně jako jiná datová aktiva 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 Deklarativní kanály Lakeflow.
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í.
Krajta
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í tak, že vytvoříte instanci
FeatureEngineeringClient
a použijetecreate_table
. - Naplňte tabulku funkcí pomocí
write_table
.
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 pomocí deklarativních kanálů Lakeflow
Poznámka:
Podpora deklarativních kanálů Lakeflow pro omezení tabulek je ve verzi Public Preview. Následující příklady kódu je nutné spustit pomocí ukázkového kanálu pro deklarativní kanály Lakeflow.
Jakoukoli tabulku publikovanou z deklarativních kanálů Lakeflow, která obsahuje omezení primárního klíče , lze použít jako tabulku funkcí. K vytvoření tabulky v kanálu s primárním klíčem můžete použít buď Databricks SQL, nebo programovací rozhraní Python deklarativních kanálů Lakeflow.
Pokud chcete vytvořit tabulku v kanálu s primárním klíčem, použijte následující syntaxi:
Databricks SQL
CREATE MATERIALIZED VIEW customer_features (
customer_id int NOT NULL,
feat1 long,
feat2 varchar(100),
CONSTRAINT customer_features_pk PRIMARY KEY (customer_id)
) AS SELECT * FROM ...;
Krajta
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 MATERIALIZED VIEW 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 ...;
Krajta
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 deklarativních kanálů Lakeflow 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
. Pro každý ze sloupců 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 vlastností časové řady
, určete 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 deklarativními kanály Lakeflow 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 deklarativních kanálů Lakeflow pro omezení tabulek je ve verzi Public Preview. Následující příklady kódu je nutné spustit pomocí ukázkového kanálu pro deklarativní kanály Lakeflow.
- 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 ...
Krajta
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 sloužit jako tabulka funkcí, a můžete použít API pro funkce s touto tabulkou.
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 JOIN, GROUP BYnebo klauzule DISTINCT. Přijatelná klíčová slova v příkazu SQL jsou SELECT, FROM, WHERE, ORDER BY, LIMITa 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 definice 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 těchto prvků způsobí, že podřízené kanály, které využívají funkce pro trénink a obsluhu modelů, přestanou fungovat.
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í funkci pro výpočet funkcí a spusťte ji s vráceným DataFrame. 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 funkci pro výpočet hodnot nových vlastností. 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žijte 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í. Podívejte se na Úlohy Lakeflow.
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 partiční klíč date
.
Databricks doporučuje povolit na tabulce liquid clustering pro efektivní načítání. Pokud nepoužíváte kapalinové clustering, nastavte sloupec data jako partiční klíč 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";
Krajta
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, který čte z tabulky vlastností a filtruje date
na období času, které vás zajímá.
Můžete také vytvořit tabulku funkcí pro časové řady, která umožňuje vyhledávání pro konkrétní bod v čase, když používáte 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 pro streamování, předejte stream DataFrame
jako argument do 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 název tabulky funkcí, funkce, nebo komentáře, ať už celý název 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
Pomocí get_table
lze získat metadata tabulky vlastností.
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 atributů a vlastnostmi v Unity Catalogu
Můžete použít značky, což jsou jednoduché páry klíč-hodnota, pro kategorizaci a správu tabulek příznaků a jednotlivých příznaků.
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.
Podívejte se na Použití značek pro zabezpečitelné objekty v katalogu Unity a Python API.
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é internetové obchody.
- Když odstraníte tabulku funkcí v katalogu Unity, odstraní se také podkladová tabulka Delta.
-
drop_table
není podporován v Databricks Runtime 13.1 ML nebo nižší. K odstranění tabulky použijte příkaz SQL.
Databricks SQL nebo FeatureEngineeringClient.drop_table
můžete použít k odstranění tabulky vlastností v katalogu Unity:
Databricks SQL
DROP TABLE ml.recommender_system.customer_features;
Krajta
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
cs-CZ: Tabulka funkcí v katalogu Unity je přístupná ze všech pracovních prostorů přidružených k metakatalogu Unity.
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.
Příklady poznámkových bloků
Základní poznámkový blok ukazuje, jak vytvořit tabulku funkcí, použít ji k trénování modelu a spuštění dávkového vyhodnocování pomocí automatického vyhledávání funkcí. Zobrazuje také uživatelské rozhraní pro přípravu funkcí, které můžete použít k vyhledání funkcí a pochopení způsobu vytváření a používání funkcí.
Ukázkový notebook s základními funkcemi v katalogu Unity
Ukázkový poznámkový blok taxi znázorňuje proces vytváření funkcí, jejich aktualizace a jejich použití pro trénování modelu a dávkové odvozování.