Inżynieria cech w katalogu aparatu Unity

Na tej stronie opisano sposób tworzenia i pracy z tabelami funkcji w wykazie aparatu Unity.

Ta strona dotyczy tylko obszarów roboczych, które są włączone dla wykazu aparatu Unity. Jeśli obszar roboczy nie jest włączony dla wykazu aparatu Unity, zobacz Praca z funkcjami w magazynie funkcji obszaru roboczego.

Wymagania

Inżynieria funkcji w wykazie aparatu Unity wymaga środowiska Databricks Runtime 13.2 lub nowszego. Ponadto magazyn metadanych wykazu aparatu Unity musi mieć model uprawnień w wersji 1.0.

Instalowanie inżynierii funkcji w kliencie języka Python katalogu aparatu Unity

Inżynieria funkcji w katalogu aparatu Unity ma klienta FeatureEngineeringClientjęzyka Python. Klasa jest dostępna w interfejsie PyPI z pakietem databricks-feature-engineering i jest wstępnie zainstalowana w środowisku Databricks Runtime 13.3 LTS ML i nowszym. Jeśli używasz środowiska uruchomieniowego usługi Databricks Innej niż ML, musisz zainstalować klienta ręcznie. Użyj macierzy zgodności, aby znaleźć poprawną wersję środowiska Databricks Runtime.

%pip install databricks-feature-engineering

dbutils.library.restartPython()

Tworzenie wykazu i schematu dla tabel funkcji w wykazie aparatu Unity

Musisz utworzyć nowy wykaz lub użyć istniejącego wykazu dla tabel funkcji.

Aby utworzyć nowy wykaz, musisz mieć CREATE CATALOG uprawnienia do magazynu metadanych.

CREATE CATALOG IF NOT EXISTS <catalog-name>

Aby użyć istniejącego wykazu, musisz mieć USE CATALOG uprawnienia do wykazu.

USE CATALOG <catalog-name>

Tabele funkcji w wykazie aparatu Unity muszą być przechowywane w schemacie. Aby utworzyć nowy schemat w wykazie, musisz mieć CREATE SCHEMA uprawnienia do wykazu.

CREATE SCHEMA IF NOT EXISTS <schema-name>

Tworzenie tabeli funkcji w wykazie aparatu Unity

Uwaga

Możesz użyć istniejącej tabeli delty w wykazie aparatu Unity, która zawiera ograniczenie klucza podstawowego jako tabelę funkcji. Jeśli tabela nie ma zdefiniowanego klucza podstawowego, należy zaktualizować tabelę przy użyciu ALTER TABLE instrukcji DDL, aby dodać ograniczenie. Zobacz Używanie istniejącej tabeli delty w wykazie aparatu Unity jako tabeli funkcji.

Jednak dodanie klucza podstawowego do tabeli przesyłania strumieniowego lub zmaterializowanego widoku opublikowanego w wykazie aparatu Unity przez potok delta Live Tables wymaga zmodyfikowania schematu tabeli przesyłania strumieniowego lub zmaterializowanej definicji widoku w celu uwzględnienia klucza podstawowego, a następnie odświeżenia tabeli przesyłania strumieniowego lub zmaterializowanego widoku. Zobacz Używanie tabeli przesyłania strumieniowego lub zmaterializowanego widoku utworzonego przez potok delta Live Tables jako tabelę funkcji.

Tabele funkcji w wykazie aparatu Unity to tabele delty. Tabele funkcji muszą mieć klucz podstawowy. Tabele funkcji, takie jak inne zasoby danych w wykazie aparatu Unity, są dostępne przy użyciu przestrzeni nazw na poziomie trzech poziomów: <catalog-name>.<schema-name>.<table-name>.

W celu utworzenia tabel funkcji w wykazie aparatu Unity można użyć języka SQL, języka Python FeatureEngineeringClientlub potoku Tabele na żywo delty.

Sql usługi Databricks

Możesz użyć dowolnej tabeli delty z ograniczeniem klucza podstawowego jako tabeli funkcji. Poniższy kod pokazuje, jak utworzyć tabelę z kluczem podstawowym:

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

Aby utworzyć tabelę funkcji szeregów czasowych, dodaj kolumnę czasu jako kolumnę klucza podstawowego i określ słowo kluczowe TIMESERIES. Słowo kluczowe TIMESERIES wymaga środowiska Databricks Runtime 13.3 LTS lub nowszego.

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 utworzeniu tabeli można zapisywać do niej dane, takie jak inne tabele delty, i mogą być używane jako tabela funkcji.

Python

Aby uzyskać szczegółowe informacje na temat poleceń i parametrów używanych w poniższych przykładach, zobacz dokumentację interfejsu API języka Python inżynierii funkcji.

  1. Napisz funkcje języka Python, aby obliczyć funkcje. Dane wyjściowe każdej funkcji powinny być ramką danych platformy Apache Spark z unikatowym kluczem podstawowym. Klucz podstawowy może składać się z co najmniej jednej kolumny.
  2. Utwórz tabelę funkcji, tworząc wystąpienie obiektu FeatureEngineeringClient i przy użyciu polecenia create_table.
  3. Wypełnij tabelę funkcji przy użyciu polecenia 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',
#   ...
# )

Tabele na żywo funkcji Delta

Uwaga

Obsługa funkcji Delta Live Tables dla ograniczeń tabel jest dostępna w publicznej wersji zapoznawczej. Poniższe przykłady kodu muszą być uruchamiane przy użyciu kanału wersji zapoznawczej funkcji Delta Live Tables.

Każda tabela opublikowana w potoku Delta Live Tables zawierająca ograniczenie klucza podstawowego może służyć jako tabela funkcji. Użyj następującej składni, aby utworzyć tabelę w potoku delta live tables z kluczem podstawowym:

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

Aby utworzyć tabelę funkcji szeregów czasowych, dodaj kolumnę czasu jako kolumnę klucza podstawowego i określ słowo kluczowe TIMESERIES.

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

Po utworzeniu tabeli można zapisywać do niej dane, takie jak inne zestawy danych tabel delta Live Tables i mogą być używane jako tabela funkcji.

Definiowanie ograniczeń tabeli jest obsługiwane tylko przez interfejs SQL delta Live Tables. Aby ustawić klucze podstawowe dla tabel przesyłania strumieniowego lub zmaterializowanych widoków, które zostały zadeklarowane w języku Python, zobacz Używanie tabeli przesyłania strumieniowego lub zmaterializowanego widoku utworzonego przez potok delta live tables jako tabeli funkcji.

Używanie istniejącej tabeli delty w wykazie aparatu Unity jako tabeli funkcji

Dowolna tabela delty w wykazie aparatu Unity z kluczem podstawowym może być tabelą funkcji w wykazie aparatu Unity i można użyć interfejsu użytkownika funkcji i interfejsu API z tabelą .

Uwaga

  • Tylko właściciel tabeli może zadeklarować ograniczenia klucza podstawowego. Nazwa właściciela jest wyświetlana na stronie szczegółów tabeli w Eksploratorze wykazu.
  • Sprawdź, czy typ danych w tabeli delta jest obsługiwany przez inżynierię funkcji w katalogu aparatu Unity. Zobacz Obsługiwane typy danych.
  • Słowo kluczowe TIMESERIES wymaga środowiska Databricks Runtime 13.3 LTS lub nowszego.

Jeśli istniejąca tabela delty nie ma ograniczenia klucza podstawowego, możesz go utworzyć w następujący sposób:

  1. Ustaw kolumny klucza podstawowego na NOT NULL. Dla każdej kolumny klucza podstawowego uruchom polecenie:

    ALTER TABLE <full_table_name> ALTER COLUMN <pk_col_name> SET NOT NULL
    
  2. Zmień tabelę, aby dodać ograniczenie klucza podstawowego:

    ALTER TABLE <full_table_name> ADD CONSTRAINT <pk_name> PRIMARY KEY(pk_col1, pk_col2, ...)
    

    pk_name to nazwa ograniczenia klucza podstawowego. Zgodnie z konwencją można użyć nazwy tabeli (bez schematu i katalogu) z sufiksem _pk . Na przykład tabela o nazwie "ml.recommender_system.customer_features" będzie miała customer_features_pk nazwę ograniczenia klucza podstawowego.

    Aby utworzyć tabelę jako tabelę funkcji szeregów czasowych, określ słowo kluczowe TIMESERIES w jednej z kolumn klucza podstawowego w następujący sposób:

    ALTER TABLE <full_table_name> ADD CONSTRAINT <pk_name> PRIMARY KEY(pk_col1 TIMESERIES, pk_col2, ...)
    

    Po dodaniu ograniczenia klucza podstawowego w tabeli tabela zostanie wyświetlona w interfejsie użytkownika funkcji i można jej użyć jako tabeli funkcji.

Używanie tabeli przesyłania strumieniowego lub zmaterializowanego widoku utworzonego przez potok delta Live Tables jako tabeli funkcji

Dowolna tabela przesyłania strumieniowego lub zmaterializowany widok w wykazie aparatu Unity z kluczem podstawowym może być tabelą funkcji w wykazie aparatu Unity i można użyć interfejsu użytkownika funkcji i interfejsu API z tabelą.

Uwaga

  • Obsługa funkcji Delta Live Tables dla ograniczeń tabel jest dostępna w publicznej wersji zapoznawczej. Poniższe przykłady kodu muszą być uruchamiane przy użyciu kanału wersji zapoznawczej funkcji Delta Live Tables.
  • Tylko właściciel tabeli może zadeklarować ograniczenia klucza podstawowego. Nazwa właściciela jest wyświetlana na stronie szczegółów tabeli w Eksploratorze wykazu.
  • Sprawdź, czy inżynieria funkcji w wykazie aparatu Unity obsługuje typ danych w tabeli delta. Zobacz Obsługiwane typy danych.

Dodawanie klucza podstawowego do tabeli przesyłania strumieniowego lub zmaterializowanego widoku, który został utworzony przy użyciu języka SQL

Aby ustawić klucze podstawowe dla istniejącej tabeli przesyłania strumieniowego lub zmaterializowanego widoku, który został utworzony przy użyciu interfejsu SQL tabel delta Live Tables, zaktualizuj schemat tabeli przesyłania strumieniowego lub zmaterializowany widok w notesie, który zarządza obiektem. Następnie odśwież tabelę, aby zaktualizować obiekt wykazu aparatu Unity.

Poniżej przedstawiono składnię dodawania klucza podstawowego do zmaterializowanego widoku:

CREATE OR REFRESH MATERIALIZED VIEW existing_live_table(
  id int NOT NULL PRIMARY KEY,
  ...
) AS SELECT ...

Dodawanie klucza podstawowego do tabeli przesyłania strumieniowego lub zmaterializowanego widoku utworzonego przy użyciu języka Python

Aby utworzyć klucze podstawowe dla istniejącej tabeli przesyłania strumieniowego lub zmaterializowanego widoku, który został utworzony przez potok delta live tables, należy użyć interfejsu SQL delta Live Tables, nawet jeśli tabela przesyłania strumieniowego lub zmaterializowany widok został utworzony przy użyciu interfejsu języka Python tabel delta Live Tables. Aby dodać klucz podstawowy do tabeli przesyłania strumieniowego lub zmaterializowany widok utworzony w języku Python, utwórz nowy notes SQL w celu zdefiniowania nowej tabeli przesyłania strumieniowego lub zmaterializowanego widoku odczytanego z istniejącej tabeli przesyłania strumieniowego lub zmaterializowanego widoku. Następnie uruchom notes jako krok istniejącego potoku delta live tables lub w nowym potoku.

Poniżej przedstawiono przykład składni używanej w nowym notesie SQL w celu dodania klucza podstawowego do zmaterializowanego widoku:

CREATE OR REFRESH MATERIALIZED VIEW new_live_table_with_constraint(
  id int NOT NULL PRIMARY KEY,
  ...
) AS SELECT * FROM existing_live_table

Kontrolowanie dostępu do tabel funkcji w wykazie aparatu Unity

Kontrola dostępu do tabel funkcji w wykazie aparatu Unity jest zarządzana przez wykaz aparatu Unity. Zobacz Uprawnienia wykazu aparatu Unity.

Aktualizowanie tabeli funkcji w wykazie aparatu Unity

Tabelę funkcji można zaktualizować w katalogu aparatu Unity, dodając nowe funkcje lub modyfikując określone wiersze na podstawie klucza podstawowego.

Nie należy aktualizować następujących metadanych tabeli funkcji:

  • Klucz podstawowy.
  • Klucz partycji.
  • Nazwa lub typ danych istniejącej funkcji.

Ich zmiana spowoduje przerwanie potoków podrzędnych, które używają funkcji do trenowania i obsługi modeli.

Dodawanie nowych funkcji do istniejącej tabeli funkcji w wykazie aparatu Unity

Nowe funkcje można dodać do istniejącej tabeli funkcji na jeden z dwóch sposobów:

  • Zaktualizuj istniejącą funkcję obliczeniową funkcji i uruchom polecenie write_table za pomocą zwróconej ramki danych. Spowoduje to zaktualizowanie schematu tabeli funkcji i scalanie nowych wartości funkcji na podstawie klucza podstawowego.
  • Utwórz nową funkcję obliczeniową funkcji, aby obliczyć nowe wartości funkcji. Ramka danych zwrócona przez tę nową funkcję obliczeniową musi zawierać podstawowe i klucze partycji tabel funkcji (jeśli zdefiniowano). Uruchom polecenie write_table z ramą danych, aby zapisać nowe funkcje w istniejącej tabeli funkcji przy użyciu tego samego klucza podstawowego.

Aktualizowanie tylko określonych wierszy w tabeli funkcji

Użyj mode = "merge" polecenia w pliku write_table. Wiersze, których klucz podstawowy nie istnieje w ramce danych wysłanej write_table w wywołaniu, pozostają niezmienione.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
fe.write_table(
  name='ml.recommender_system.customer_features',
  df = customer_features_df,
  mode = 'merge'
)

Planowanie zadania w celu zaktualizowania tabeli funkcji

Aby zapewnić, że funkcje w tabelach funkcji zawsze mają najnowsze wartości, usługa Databricks zaleca utworzenie zadania , które uruchamia notes w celu regularnego aktualizowania tabeli funkcji, na przykład codziennie. Jeśli masz już utworzone nieplanowane zadanie, możesz przekonwertować je na zaplanowane zadanie , aby upewnić się, że wartości funkcji są zawsze aktualne.

Kod aktualizowania tabeli funkcji używa metody mode='merge', jak pokazano w poniższym przykładzie.

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

Przechowywanie poprzednich wartości codziennych funkcji

Zdefiniuj tabelę funkcji przy użyciu złożonego klucza podstawowego. Uwzględnij datę w kluczu podstawowym. Na przykład w przypadku tabeli customer_featuresfunkcji można użyć złożonego klucza podstawowego (date, customer_id) i klucza date partycji do wydajnego odczytu.

Sql usługi Databricks

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)
)
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'],
  partition_columns=['date'],
  schema=customer_features_df.schema,
  description='Customer features'
)

Następnie możesz utworzyć kod do odczytu z filtrowania date tabeli funkcji do okresu zainteresowania.

Możesz również utworzyć tabelę funkcji szeregów czasowych, która umożliwia wyszukiwanie do punktu w czasie w przypadku użycia create_training_set funkcji lub score_batch. Zobacz Tworzenie tabeli funkcji w wykazie aparatu Unity.

Aby zachować aktualność tabeli funkcji, skonfiguruj regularnie zaplanowane zadanie do pisania funkcji lub przesyłania strumieniowego nowych wartości funkcji do tabeli funkcji.

Tworzenie potoku obliczeń funkcji przesyłania strumieniowego w celu zaktualizowania funkcji

Aby utworzyć potok obliczeń funkcji przesyłania strumieniowego, przekaż przesyłanie strumieniowe DataFrame jako argument do write_tableelementu . Ta metoda zwraca StreamingQuery obiekt.

def compute_additional_customer_features(data):
  ''' Returns Streaming DataFrame
  '''
  pass

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()

customer_transactions = spark.readStream.load("dbfs:/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'
)

Odczytywanie z tabeli funkcji w wykazie aparatu Unity

Użyj read_table polecenia , aby odczytać wartości funkcji.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
customer_features_df = fe.read_table(
  name='ml.recommender_system.customer_features',
)

Wyszukiwanie i przeglądanie tabel funkcji w wykazie aparatu Unity

Użyj interfejsu użytkownika funkcji, aby wyszukać lub przeglądać tabele funkcji w wykazie aparatu Unity.

  1. Kliknij pozycję Ikona magazynu funkcjiFunkcje na pasku bocznym, aby wyświetlić interfejs użytkownika funkcji.

  2. Wybierz katalog z selektorem wykazu, aby wyświetlić wszystkie dostępne tabele funkcji w tym wykazie. W polu wyszukiwania wprowadź wszystkie lub część nazwy tabeli funkcji, funkcji lub komentarza. Możesz również wprowadzić wszystkie lub część klucza lub wartości tagu. Tekst wyszukiwania jest niewrażliwy na wielkość liter.

    Przykład wyszukiwania funkcji

Pobieranie metadanych tabel funkcji w wykazie aparatu Unity

Użyj get_table polecenia , aby uzyskać metadane tabeli funkcji.

from databricks.feature_engineering import FeatureEngineeringClient
fe = FeatureEngineeringClient()
ft = fe.get_table(name="ml.recommender_system.user_feature_table")
print(ft.features)

Używanie tagów z tabelami funkcji i funkcjami w wykazie aparatu Unity

Możesz użyć tagów, które są prostymi parami klucz-wartość, aby kategoryzować tabele i funkcje funkcji i zarządzać nimi.

W przypadku tabel funkcji można tworzyć, edytować i usuwać tagi przy użyciu Eksploratora wykazu, instrukcji SQL w notesie lub edytorze zapytań SQL albo interfejsu API języka Python inżynierii funkcji.

W przypadku funkcji można tworzyć, edytować i usuwać tagi przy użyciu Eksploratora wykazu lub instrukcji SQL w notesie lub edytorze zapytań SQL.

Zobacz Stosowanie tagów do zabezpieczanych obiektów wykazu aparatu Unity i interfejsu API języka Python.

W poniższym przykładzie pokazano, jak używać interfejsu API języka Python inżynierii funkcji do tworzenia, aktualizowania i usuwania tagów tabeli funkcji.

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

Usuwanie tabeli funkcji w wykazie aparatu Unity

Tabelę funkcji w wykazie aparatu Unity można usunąć bezpośrednio, usuwając tabelę delta w wykazie aparatu Unity przy użyciu Eksploratora wykazu lub korzystając z interfejsu API języka Python inżynierii funkcji.

Uwaga

  • Usunięcie tabeli funkcji może prowadzić do nieoczekiwanych błędów u producentów nadrzędnych i odbiorców podrzędnych (modeli, punktów końcowych i zaplanowanych zadań). Musisz usunąć opublikowane sklepy online u dostawcy usług w chmurze.
  • Usunięcie tabeli funkcji w wykazie aparatu Unity powoduje również usunięcie bazowej tabeli delty.
  • drop_table program nie jest obsługiwany w środowisku Databricks Runtime 13.1 ML lub nowszym. Użyj polecenia SQL, aby usunąć tabelę.

Możesz użyć języka SQL usługi Databricks lub FeatureEngineeringClient.drop_table usunąć tabelę funkcji w wykazie aparatu Unity:

Sql usługi Databricks

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