Sdílet prostřednictvím


Práce s tabulkami funkcí v úložišti funkcí pracovního prostoru (starší verze)

Poznámka:

Tato dokumentace se zabývá Úložištěm funkcí pro pracovní prostor. Databricks doporučuje využívat úpravu vlastností v Unity Catalog. Úložiště funkcí pracovního prostoru bude v budoucnu přestat být podporováno.

Informace o práci s tabulkami funkcí v katalogu Unity najdete v tématu Práce s tabulkami funkcí v katalogu Unity.

Tato stránka popisuje, jak vytvořit tabulky funkcí a pracovat s tabulkami funkcí v úložišti funkcí pracovního prostoru.

Poznámka:

Pokud je váš pracovní prostor povolený pro Katalog Unity, každá tabulka spravovaná katalogem Unity, která má primární klíč, je automaticky tabulka funkcí, kterou můžete použít pro trénování a odvozování modelu. Všechny funkce katalogu Unity, jako jsou zabezpečení, rodokmen, označování a přístup mezi pracovními prostory, jsou pro tabulku funkcí automaticky dostupné. Informace o práci s tabulkami funkcí v pracovním prostoru s podporou katalogu Unity najdete v tématu Práce s tabulkami funkcí v katalogu Unity.

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 tabulek databází a funkcí můžou obsahovat pouze alfanumerické znaky a podtržítka (_).

Vytvoření databáze pro tabulky funkcí

Před vytvořením tabulek funkcí je nutné vytvořit databázi pro jejich uložení.

%sql CREATE DATABASE IF NOT EXISTS <database-name>

Tabulky funkcí se ukládají jako tabulky Delta. Při vytváření tabulky funkcí s klientem create_table úložiště funkcí v0.3.6 a novějším nebo create_feature_table (v0.3.5 a novějším) je nutné zadat název databáze. Tento argument například vytvoří tabulku Delta pojmenovanou customer_features v databázi recommender_system.

name='recommender_system.customer_features'

Když publikujete tabulku funkcí do online obchodu, výchozí název tabulky a databáze jsou ty, které jsou zadané při vytváření tabulky; pomocí metody můžete zadat různé názvy publish_table .

Uživatelské rozhraní úložiště funkcí Databricks zobrazuje název tabulky a databáze v online úložišti spolu s dalšími metadaty.

Vytvoření tabulky funkcí v úložišti funkcí Databricks

Poznámka:

Existující tabulku Delta můžete také zaregistrovat jako tabulku funkcí. Viz Registrace existující tabulky Delta jako tabulky funkcí.

Základní postup vytvoření tabulky funkcí:

  1. 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ů.
  2. Vytvořte tabulku funkcí vytvořením instance instance a FeatureStoreClient použití create_table (v0.3.6 a vyšší) nebo create_feature_table (v0.3.5 a novější).
  3. Naplňte tabulku funkcí pomocí write_tablefunkce .

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í PYTHON API úložiště funkcí.

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'
)

Registrace existující tabulky Delta jako tabulky funkcí

Pomocí verze 0.3.8 a vyšší můžete zaregistrovat existující tabulku Delta jako tabulku funkcí. Tabulka Delta musí existovat v metastoru.

Poznámka:

Pokud chcete aktualizovat registrovanou tabulku funkcí, musíte použít rozhraní PYTHON API úložiště funkcí.

fs.register_table(
  delta_table='recommender.customer_features',
  primary_keys='customer_id',
  description='Customer features'
)

Řízení přístupu k tabulkám funkcí

Viz Řízení přístupu k tabulkám funkcí v úložišti funkcí pracovního prostoru (starší verze).

Aktualizace tabulky funkcí

Tabulku funkcí 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í nelze aktualizovat:

  • Primární klíč
  • Klíč oddílu
  • Název nebo typ existující funkce

Přidání nových funkcí do existující tabulky funkcí

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í klíče tabulek funkcí a klíče oddílů (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.

fs.write_table(
  name='recommender.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 měli jistotu, že jsou hodnoty funkcí vždy aktuální. Viz Přehled orchestrace v databricks.

Kód pro aktualizaci tabulky funkcí 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 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 store_purchasesfunkcí můžete pro efektivní čtení použít složený primární klíč (date, user_id) a klíč date oddílu.

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 filtrování date tabulky funkcí do časového období zájmu.

Tabulku funkcí časových řad můžete vytvořit také zadáním date sloupce jako klíče časového razítka pomocí argumentutimestamp_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í spojení s časovým razítkem pomocí zadaného parametru timestamp_lookup_key .

Pokud chcete tabulku funkcí udržovat v aktualizovaném stavu, nastavte pravidelně naplánovanou úlohu pro zápis funkcí nebo streamujte nové hodnoty 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  # 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 tabulky funkcí

Slouží read_table ke čtení hodnot funkcí.

fs = feature_store.FeatureStoreClient()
customer_features_df = fs.read_table(
  name='recommender.customer_features',
)

Vyhledávání a procházení tabulek funkcí

K vyhledání nebo procházení tabulek funkcí použijte uživatelské rozhraní úložiště funkcí.

  1. Na bočním panelu vyberte > funkcí machine learningu a zobrazte uživatelské rozhraní úložiště funkcí.

  2. Do vyhledávacího pole zadejte celý nebo část názvu tabulky funkcí, funkce nebo zdroje dat používaného k výpočtu funkce. Můžete také zadat celý klíč nebo část klíče nebo hodnoty značky. Hledaný text nerozlišuje velká a malá písmena.

    Příklad vyhledávání funkcí

Získání metadat tabulky funkcí

Rozhraní API pro získání metadat tabulky funkcí závisí na verzi modulu 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")

Práce se značkami tabulky funkcí

Značky jsou páry klíč–hodnota, které můžete vytvořit a použít k vyhledávání tabulek vlastností. 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 se značkami tabulky funkcí v uživatelském rozhraní

K vyhledání nebo procházení tabulek funkcí použijte uživatelské rozhraní úložiště funkcí. Pokud chcete získat přístup k uživatelskému rozhraní, vyberte > funkcí Machine Learning.

Přidání značky pomocí uživatelského rozhraní úložiště funkcí

  1. Klikněte, Ikona značky pokud ještě není otevřený. Zobrazí se tabulka značek.

    tabulka značek

  2. Klikněte do polí Název a Hodnota a zadejte klíč a hodnotu značky.

  3. 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 ve sloupci Akce.

akce značek

Práce se značkami tabulek funkcí 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í tabulky funkcí se značkou pomocí rozhraní Python API úložiště funkcí

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řidání, aktualizace a odstranění značek pomocí rozhraní Python API úložiště funkcí

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")

Aktualizace zdrojů dat pro tabulku funkcí

Úložiště funkcí automaticky sleduje zdroje dat používané k výpočetním funkcím. Zdroje dat můžete také aktualizovat ručně pomocí rozhraní 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í tabulky funkcí

Tabulku funkcí můžete odstranit pomocí uživatelského rozhraní úložiště funkcí nebo rozhraní Python API úložiště 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í pomocí rozhraní API, odstraní se také podkladová tabulka Delta. Když odstraníte tabulku funkcí z uživatelského rozhraní, musíte podkladovou tabulku Delta odstranit samostatně.

Odstranění tabulky funkcí pomocí uživatelského rozhraní

  1. Na stránce tabulky funkcí klikněte Tlačítko s šipkou dolů na pravé straně názvu tabulky funkcí a vyberte Odstranit. Pokud nemáte oprávnění CAN MANAGE pro tabulku funkcí, tato možnost se nezobrazí.

    Výběr možnosti Odstranit z rozevírací nabídky

  2. V dialogovém okně Odstranit tabulku funkcí potvrďte kliknutím na Odstranit .

  3. Pokud chcete také odstranit podkladovou tabulku Delta, spusťte v poznámkovém bloku následující příkaz.

    %sql DROP TABLE IF EXISTS <feature-table-name>;
    

Odstranění tabulky funkcí pomocí rozhraní Python API úložiště funkcí

Pomocí klienta úložiště funkcí verze 0.4.1 a vyšší můžete tabulku drop_table funkcí odstranit. Když odstraníte tabulku s drop_table, podkladová tabulka Delta se také zahodí.

fs.drop_table(
  name='recommender_system.customer_features'
)