Megosztás a következőn keresztül:


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 FeatureEngineeringClientrendelkezik. 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 FeatureEngineeringClientvagy 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.

  1. Í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.
  2. Hozzon létre egy szolgáltatástáblát a példányosítással FeatureEngineeringClient és a használatával create_table.
  3. 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:

  1. 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
    
  2. 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 rendelkeznie customer_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_featurespé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_batcha .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.

  1. Kattintson Funkciótár ikon az oldalsáv Szolgáltatások elemére a Szolgáltatások felhasználói felület megjelenítéséhez.

  2. 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.

    Példa funkciókeresésre

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.