Funkciótáblákkal végzett munka
Ez a lap bemutatja, hogyan hozhat létre és dolgozhat funkciótáblákkal a Unity Catalogban.
Ez a lap csak a Unity Cataloghoz engedélyezett munkaterületekre vonatkozik. Ha a munkaterület nincs engedélyezve a Unity Katalógusban, olvassa el a Funkciótáblák használata a munkaterület funkciótárolójában című témakört.
Az ezen a lapon található példákban használt parancsokkal és paraméterekkel kapcsolatos részletekért tekintse meg a Szolgáltatásmérnöki Python API-referenciát.
Követelmények
A Unity Catalog szolgáltatásfejlesztéséhez a Databricks Runtime 13.2-s vagy újabb verziója szükséges. Emellett a Unity Catalog metaadattárának rendelkeznie kell a Privilege Model 1.0-s verziójával.
Szolgáltatásfejlesztés telepítése a Unity Catalog Python-ügyfélben
A Unity Catalog szolgáltatásfejlesztése Python-ügyfélrel FeatureEngineeringClient
rendelkezik. Az osztály a csomaggal együtt elérhető a databricks-feature-engineering
PyPI-ban, és előre telepítve van a Databricks Runtime 13.3 LTS ML-ben és újabb verziókban. Ha nem ML Databricks-futtatókörnyezetet használ, manuálisan kell telepítenie az ügyfelet. Használja a kompatibilitási mátrixot a Databricks Runtime-verzió megfelelő verziójának megkereséséhez.
%pip install databricks-feature-engineering
dbutils.library.restartPython()
Katalógus és séma létrehozása funkciótáblákhoz a Unity Catalogban
Létre kell hoznia egy új katalógust , vagy egy meglévő katalógust kell használnia a funkciótáblákhoz.
Új katalógus létrehozásához rendelkeznie kell a CREATE CATALOG
metaadattár jogosultságával.
CREATE CATALOG IF NOT EXISTS <catalog-name>
Meglévő katalógus használatához rendelkeznie kell a USE CATALOG
katalógus jogosultságával.
USE CATALOG <catalog-name>
A Unity Catalog szolgáltatástábláinak sémában kell tárolniuk. Ha új sémát szeretne létrehozni a katalógusban, rendelkeznie kell a CREATE SCHEMA
katalógus jogosultságával.
CREATE SCHEMA IF NOT EXISTS <schema-name>
Funkciótábla létrehozása a Unity Catalogban
Feljegyzés
Használhat egy meglévő Delta-táblát a Unity Katalógusban, amely egy elsődleges kulcskorlátozást tartalmaz funkciótáblaként. Ha a táblában nincs meghatározva elsődleges kulcs, a korlátozás hozzáadásához DDL-utasítások használatával ALTER TABLE
frissítenie kell a táblát. Lásd: Meglévő Delta-tábla használata funkciótábláként a Unity Katalógusban.
Ha azonban egy Delta Live Tables-folyamat által közzétett streamelési táblához vagy materializált nézethez elsődleges kulcsot ad hozzá, módosítania kell a streamelési tábla sémáját vagy a materializált nézetdefiníciót, hogy az tartalmazza az elsődleges kulcsot, majd frissítse a streamelési táblát vagy a materializált nézetet. Lásd: A Delta Live Tables-folyamat által létrehozott streamelési tábla vagy materializált nézet használata funkciótáblaként.
A Unity Catalog szolgáltatástáblái deltatáblák. A funkciótábláknak elsődleges kulccsal kell rendelkezniük. A funkciótáblák, például a Unity Catalog más adategységei, háromszintű névtérrel érhetők el: <catalog-name>.<schema-name>.<table-name>
.
A Databricks SQL, a Python FeatureEngineeringClient
vagy a Delta Live Tables folyamat használatával funkciótáblákat hozhat létre a Unity Catalogban.
Databricks SQL
Funkciótáblaként bármely Delta-táblát használhat, amelynek elsődleges kulcskorlátozása van . Az alábbi kód bemutatja, hogyan hozhat létre táblát elsődleges kulccsal:
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)
);
Idősor-funkciótábla létrehozásához adjon hozzá egy időoszlopot elsődleges kulcsoszlopként, és adja meg a TIMESERIES kulcsszót. A TIMESERIES kulcsszóhoz a Databricks Runtime 13.3 LTS vagy újabb verziója szükséges.
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)
);
A tábla létrehozása után más Delta-táblákhoz hasonlóan adatokat írhat hozzá, és funkciótáblaként is használható.
Python
Az alábbi példákban használt parancsokkal és paraméterekkel kapcsolatos részletekért tekintse meg a Feature Engineering Python API-referenciáját.
- Írja meg a Python-függvényeket a funkciók kiszámításához. Az egyes függvények kimenetének egyedi elsődleges kulccsal rendelkező Apache Spark DataFrame-nek kell lennie. Az elsődleges kulcs egy vagy több oszlopból állhat.
- Hozzon létre egy szolgáltatástáblát a példányosítással
FeatureEngineeringClient
és a használatávalcreate_table
. - Töltse ki a funkciótáblát a következővel
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',
# ...
# )
Funkciótábla létrehozása a Unity Katalógusban Delta Live Tables-folyamattal
Feljegyzés
A Delta Live Tables táblamegkötések támogatása nyilvános előzetes verzióban érhető el. Az alábbi példakódokat a Delta Live Tables előzetes csatornáján kell futtatni.
Az elsődleges kulcskorlátozást tartalmazó Delta Live Tables-folyamatból közzétett táblák funkciótábláként használhatók. Ha elsődleges kulccsal szeretne táblázatot létrehozni egy Delta Live Tables-folyamatban, használhatja a Databricks SQL-t vagy a Delta Live Tables Python programozási felületét.
Ha elsődleges kulccsal szeretne táblázatot létrehozni egy Delta Live Tables-folyamatban, használja a következő szintaxist:
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 ...
Idősor-funkciótábla létrehozásához adjon hozzá egy időoszlopot elsődleges kulcsoszlopként, és adja meg a TIMESERIES kulcsszót.
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 ...
A tábla létrehozása után más Delta Live Tables-adatkészletekhez hasonlóan adatokat is írhat hozzá, és funkciótáblaként is használható.
Meglévő Delta-tábla használata funkciótáblázatként a Unity Catalogban
A Unity Katalógusban az elsődleges kulccsal rendelkező Delta-táblák a Unity Catalog szolgáltatástáblái lehetnek, és a Funkciók felhasználói felületet és API-t használhatja a táblával.
Feljegyzés
- Csak a tábla tulajdonosa deklarálhat elsődleges kulcskorlátozásokat. A tulajdonos neve megjelenik a Catalog Explorer táblázatrészletoldalán.
- Ellenőrizze, hogy a Delta-táblában lévő adattípust támogatja-e a Unity Catalog szolgáltatásfejlesztése. Lásd a támogatott adattípusokat.
- A TIMESERIES kulcsszóhoz a Databricks Runtime 13.3 LTS vagy újabb verziója szükséges.
Ha egy meglévő Delta-tábla nem rendelkezik elsődleges kulcskényszerrel, az alábbiak szerint hozhat létre egyet:
Az elsődleges kulcsoszlopok beállítása a következőre
NOT NULL
: . Minden elsődleges kulcsoszlophoz futtassa a következőt:ALTER TABLE <full_table_name> ALTER COLUMN <pk_col_name> SET NOT NULL
Módosítsa a táblát az elsődleges kulcs korlátozásának hozzáadásához:
ALTER TABLE <full_table_name> ADD CONSTRAINT <pk_name> PRIMARY KEY(pk_col1, pk_col2, ...)
pk_name
az elsődleges kulcskorlátozás neve. Konvenció szerint a tábla nevét (séma és katalógus nélkül) utótaggal_pk
is használhatja. Egy táblának például a nevével"ml.recommender_system.customer_features"
kellene rendelkezniecustomer_features_pk
az elsődleges kulcskényszer neveként.Ha idősoros funkciótáblává szeretné tenni a táblát, adja meg a TIMESERIES kulcsszót az egyik elsődleges kulcsoszlopon az alábbiak szerint:
ALTER TABLE <full_table_name> ADD CONSTRAINT <pk_name> PRIMARY KEY(pk_col1 TIMESERIES, pk_col2, ...)
Miután hozzáadta az elsődleges kulcskorlátozást a táblához, a tábla megjelenik a Szolgáltatások felhasználói felületén, és funkciótáblaként is használható.
Delta Live Tables-folyamat által létrehozott streamelési táblázat vagy materializált nézet használata funkciótáblázatként
A Unity Katalógusban az elsődleges kulccsal rendelkező streamelőtáblák vagy materializált nézetek a Unity Catalog szolgáltatástáblái lehetnek, és a funkciók felhasználói felületét és API-ját használhatja a táblával.
Feljegyzés
- A Delta Live Tables táblamegkötések támogatása nyilvános előzetes verzióban érhető el. Az alábbi példakódokat a Delta Live Tables előzetes csatornáján kell futtatni.
- Csak a tábla tulajdonosa deklarálhat elsődleges kulcskorlátozásokat. A tulajdonos neve megjelenik a Catalog Explorer táblázatrészletoldalán.
- Ellenőrizze, hogy a Unity Catalog szolgáltatásfejlesztése támogatja-e a Delta tábla adattípusát. Lásd a támogatott adattípusokat.
Meglévő streamelési tábla vagy materializált nézet elsődleges kulcsainak beállításához frissítse a streamelési tábla sémáját vagy az objektumot kezelő jegyzetfüzet materializált nézetét. Ezután frissítse a táblát a Unity Catalog objektum frissítéséhez.
Az alábbi szintaxissal adhat hozzá elsődleges kulcsot egy materializált nézethez:
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 ...
Funkciótábla frissítése a Unity Catalogban
A Unity Catalog szolgáltatástábláját új funkciók hozzáadásával vagy az elsődleges kulcs alapján meghatározott sorok módosításával frissítheti.
A következő szolgáltatástáblázat metaadatai nem frissíthetők:
- Elsődleges kulcs.
- Partíciókulcs.
- Meglévő szolgáltatás neve vagy adattípusa.
Ha módosítja őket, a betanításhoz és a modellek kiszolgálásához funkciókat használó alsóbb rétegbeli folyamatok megszakadnak.
Új funkciók hozzáadása meglévő funkciótáblához a Unity Catalogban
Új funkciókat kétféleképpen adhat hozzá egy meglévő funkciótáblához:
- Frissítse a meglévő funkciószámítási függvényt, és futtassa
write_table
a visszaadott DataFrame-et. Ez frissíti a szolgáltatástábla sémáját, és egyesíti az új funkcióértékeket az elsődleges kulcs alapján. - Hozzon létre egy új funkciószámítási függvényt az új funkcióértékek kiszámításához. Az új számítási függvény által visszaadott DataFrame-nek tartalmaznia kell a funkciótáblák elsődleges és partíciókulcsait (ha meg van adva). Futtassa
write_table
a DataFrame-et az új funkcióknak a meglévő funkciótáblába való írásához ugyanazzal az elsődleges kulccsal.
Csak bizonyos sorok frissítése egy szolgáltatástáblában
Használat mode = "merge"
a következőben: write_table
. Azok a sorok, amelyek elsődleges kulcsa nem létezik a hívásban küldött DataFrame-ben write_table
, változatlanok maradnak.
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
fe.write_table(
name='ml.recommender_system.customer_features',
df = customer_features_df,
mode = 'merge'
)
Feladat ütemezése funkciótáblák frissítéséhez
Annak érdekében, hogy a funkciótáblák funkciói mindig a legújabb értékekkel rendelkezzenek, a Databricks azt javasolja, hogy hozzon létre egy jegyzetfüzetet futtató feladatot, amely rendszeresen, például naponta frissíti a funkciótáblát. Ha már létrehozott egy nem ütemezett feladatot, átkonvertálja ütemezett feladattá, hogy a funkció értékei mindig naprakészek legyenek. Lásd: Munkafolyamatok ütemezése és vezénylálása.
A funkciótáblák frissítéséhez használt mode='merge'
kód az alábbi példában látható.
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'
)
A napi funkciók múltbeli értékeinek tárolása
Összetett elsődleges kulccsal rendelkező funkciótábla definiálása. Adja meg a dátumot az elsődleges kulcsban. Egy funkciótáblához customer_features
például összetett elsődleges kulcsot (date
, customer_id
) és partíciókulcsot date
használhat a hatékony olvasáshoz.
A Databricks azt javasolja, hogy engedélyezze a folyékony fürtözést a táblán a hatékony olvasás érdekében. Ha nem használ folyékony fürtözést, állítsa be a dátumoszlopot partíciókulcsként a jobb olvasási teljesítmény érdekében.
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'
)
Ezután létrehozhat olyan kódot, amely beolvassa a funkciótábla szűréséből date
a kamatidőszakra.
Létrehozhat egy idősorozat-funkciótáblát is, amely lehetővé teszi az időponthoz kötött kereséseket a használatkor vagy score_batch
a .create_training_set
Lásd: Szolgáltatástábla létrehozása a Unity Katalógusban.
A funkciótáblázat naprakészen tartásához állítson be egy rendszeresen ütemezett feladatot a funkciók írásához vagy új funkcióértékek szolgáltatástáblába való streameléséhez.
Streamelési szolgáltatás számítási folyamatának létrehozása a funkciók frissítéséhez
Streamelési szolgáltatás számítási folyamatának létrehozásához adjon át egy streamelést DataFrame
argumentumként.write_table
Ez a metódus egy objektumot StreamingQuery
ad vissza.
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'
)
Olvasás funkciótáblából a Unity Catalogban
Funkcióértékek olvasására használható read_table
.
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
customer_features_df = fe.read_table(
name='ml.recommender_system.customer_features',
)
Funkciótáblák keresése és tallózása a Unity Katalógusban
A Szolgáltatások felhasználói felülettel kereshet vagy tallózhat a Unity Catalog szolgáltatástáblái között.
Kattintson az oldalsáv Szolgáltatások elemére a Szolgáltatások felhasználói felület megjelenítéséhez.
Válassza ki a katalógust a katalógusválasztóval a katalógus összes elérhető funkciótáblájának megtekintéséhez. A keresőmezőbe írja be egy szolgáltatástábla, szolgáltatás vagy megjegyzés nevének egészét vagy egy részét. A címke kulcsának vagy értékének egészét vagy egy részét is megadhatja. A keresési szöveg nem érzékeny a kis- és nagybetűkre.
Szolgáltatástáblák metaadatainak lekérése a Unity Katalógusban
Funkciótáblázat metaadatainak lekérésére használható get_table
.
from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
ft = fe.get_table(name="ml.recommender_system.user_feature_table")
print(ft.features)
Címkék használata funkciótáblákkal és funkciókkal a Unity Catalogban
A funkciótáblák és szolgáltatások kategorizálásához és kezeléséhez használhat címkéket, amelyek egyszerű kulcs-érték párok.
Funkciótáblák esetén címkéket hozhat létre, szerkeszthet és törölhet a Catalog Explorer, a jegyzetfüzetben vagy az SQL-lekérdezésszerkesztőben található SQL-utasítások vagy a Szolgáltatásmérnöki Python API használatával.
Funkciók esetén címkéket hozhat létre, szerkeszthet és törölhet a Katalóguskezelő vagy az SQL-utasítások használatával egy jegyzetfüzetben vagy az SQL-lekérdezésszerkesztőben.
Lásd: Címkék alkalmazása a Unity Catalog biztonságos objektumaihoz, valamint a szolgáltatásfejlesztéshez és a munkaterületi szolgáltatástárhoz tartozó Python API-ra.
Az alábbi példa bemutatja, hogyan használhatja a Feature Engineering Python API-t funkciótáblák címkéinek létrehozására, frissítésére és törlésére.
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")
Funkciótábla törlése a Unity Katalógusban
A Unity Catalog szolgáltatástábláit törölheti úgy, hogy közvetlenül törli a Delta táblát a Unity Catalogban a Catalog Explorer vagy a Feature Engineering Python API használatával.
Feljegyzés
- A szolgáltatástáblák törlése váratlan hibákat okozhat a felsőbb rétegbeli gyártókban és az alsóbb rétegbeli felhasználókban (modellek, végpontok és ütemezett feladatok). A közzétett online áruházakat törölnie kell a felhőszolgáltatójával.
- Ha töröl egy funkciótáblát a Unity Catalogban, a mögöttes Delta-tábla is el lesz távolítva.
drop_table
a Databricks Runtime 13.1 ML-ben vagy az alatt nem támogatott. A tábla törléséhez használja az SQL-parancsot.
Használhatja a Databricks SQL-t, vagy FeatureEngineeringClient.drop_table
törölhet egy funkciótáblát a Unity Catalogban:
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'
)
Funkciótábla megosztása a Unity Katalógusban munkaterületek vagy fiókok között
A Unity Catalog szolgáltatástáblája a táblázat Unity Catalog-metaadattára által hozzárendelt összes munkaterület számára elérhető.
Ha olyan munkaterületekkel szeretne megosztani egy szolgáltatástáblát, amelyek nincsenek ugyanahhoz a Unity Catalog-metaadattárhoz rendelve, használja a Delta Sharing szolgáltatást.