Поделиться через


Работа с функциями tables в хранилище компонентов рабочей области (устаревшая версия)

Примечание.

В этой документации рассматривается хранилище компонентов рабочей области. Databricks рекомендует использовать инженерию признаков в Unity Catalog. Функция Feature Store в рабочей области будет снята с поддержки в будущем.

Сведения о работе с функциями tables в Unity Catalogсм. в статье Работа с функциями tables в Unity Catalog.

На этой странице описывается создание и работа с функциями tables в хранилище компонентов рабочей области.

Примечание.

Если рабочая область активирована для Unity Catalog, любые table, которыми управляет Unity Catalog и имеют первичный ключ, автоматически становятся функцией table, которую можно использовать для обучения моделей и вывода. Все возможности Unity Catalog, такие как безопасность, происхождение, тегирование и доступ между рабочими областями, автоматически доступны для модуля table. Сведения о работе с функциями tables в рабочей области с поддержкой Unity Catalogсм. в статье Работа с функциями tables в Unity Catalog.

Сведения об отслеживании происхождения и свежести функций см. в разделе Обнаружение функций и отслеживание происхождения функций в хранилище компонентов рабочей области (устаревшая версия).

Примечание.

Имена баз данных и компонентов table могут содержать только буквенно-цифровые символы и символы подчеркивания (_).

Создание базы данных для компонента tables

Перед созданием любой функции tablesнеобходимо создать базу данных для их хранения.

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

Функции tables хранятся как Delta tables. При создании компонента table с create_table (клиент Магазина компонентов версии 0.3.6 и выше) или create_feature_table (v0.3.5 и ниже) необходимо указать имя базы данных. Например, этот аргумент создает Дельта table с именем customer_features в базе данных recommender_system.

name='recommender_system.customer_features'

При публикации компонента table в интернет-магазине table по умолчанию и имя базы данных указываются при создании table; Можно указать различные имена с помощью метода publish_table.

В пользовательском интерфейсе Хранилища компонентов Databricks отображается имя table и базы данных в интернет-магазине, а также другие метаданные.

создание компонента table в Хранилище компонентов Databricks

Примечание.

Вы также можете зарегистрировать существующий Delta table в качестве функции table. См. раздел Регистрация существующей table Delta в качестве функции table.

Ниже приведены основные шаги по созданию функции table:

  1. Напишите функции Python для вычисления признаков. Выходные данные каждой функции должны представлять собой объект DataFrame Apache Spark с уникальным первичным ключом. Первичный ключ может состоять из одного или нескольких columns.
  2. Создайте функцию table путем создания экземпляра FeatureStoreClient и использования create_table (версии 0.3.6 и более поздних версий) или create_feature_table (версии 0.3.5 и ниже).
  3. Заполните функцию table с помощью write_table.

Дополнительные сведения о командах и parameters, используемых в следующих примерах, см. в справочнике по API Python для хранилища компонентов .

Версия 0.3.6 и выше

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

Версия 0.3.5 и выше

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

Зарегистрируйте существующую Delta table как функцию table

В версии 0.3.8 и более поздних версий можно зарегистрировать существующий Delta table в качестве функции table. Delta table должна существовать в хранилище метаданных.

Примечание.

Чтобы зарегистрированную функцию , необходимо использоватьAPI Python для хранилища компонентов .

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

Управление доступом к функциям tables

См. управление доступом к функциям tables в хранилище компонентов рабочей области (устаревшая версия).

Update функции table

Вы можете update функцию table, добавив новые функции или изменив определенные строки на основе первичного ключа.

Невозможно обновить метаданные следующих функций table:

  • Первичный ключ
  • Клавиша Partition
  • Имя или тип существующего признака

Добавление новых функций в существующую функциональность table

Вы можете добавить новые функции в существующий компонент table одним из двух способов:

  • Update существующую функцию вычисления признаков и запустите write_table с полученным DataFrame. Это обновляет функцию tableиschema и объединяет новую функцию values, основываясь на первичном ключе.
  • Создайте новую функцию вычисления признаков для вычисления новой функции values. ДатаФрейм, возвращаемый этой новой вычислительной функцией, должен содержать первичные ключи для признака tablesи ключи partition (если определены). Запустите write_table с DataFrame, чтобы записать новые признаки в существующий набор признаков table, используя тот же первичный ключ.

Update только определенные строки в компоненте table

Используйте mode = "merge" в write_table. Строки, первичный ключ которых не существует в объекте DataFrame, переданном в вызове write_table, не изменяются.

fs.write_table(
  name='recommender.customer_features',
  df = customer_features_df,
  mode = 'merge'
)

Запланировать задание для функции updatetable

Чтобы функции в функциях tables всегда имели самые последние values, Databricks рекомендует создать задание, которое запускает записную книжку для update функции table регулярно, например каждый день. Если у вас уже есть непланированное задание, его можно преобразовать в запланированное задание, чтобы убедиться, что функция values всегда up-to-date. См . инструкции по расписанию и оркестрации рабочих процессов.

Код для update функции, table использует mode='merge', как показано в следующем примере.

fs = FeatureStoreClient()

customer_features_df = compute_customer_features(data)

fs.write_table(
  df=customer_features_df,
  name='recommender_system.customer_features',
  mode='merge'
)

Хранение последних values ежедневных функций

Определите функцию table с составным первичным ключом. Включите в первичный ключ дату. Например, для функции tablestore_purchasesможно использовать составной первичный ключ (date, user_id) и ключ partitiondate для эффективного чтения.

fs.create_table(
  name='recommender_system.customer_features',
  primary_keys=['date', 'customer_id'],
  partition_columns=['date'],
  schema=customer_features_df.schema,
  description='Customer features'
)

Затем можно создать код для чтения из фильтрующей функции tabledate в интересующий период времени.

Вы также можете создать функцию временных рядов table, указав datecolumn в качестве ключа метки времени с помощью аргумента timestamp_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'
)

Это позволяет выполнять поиск на определенный момент времени при использовании create_training_set или score_batch. Система создает метку времени as-of joinс помощью указанного вами timestamp_lookup_key.

Чтобы обеспечить актуальность table функции, set регулярно запланированных заданий для записи функций или потоковой передачи новых функций values в tableфункции.

Создание конвейера вычислений функций потоковой передачи для update функций

Чтобы создать конвейер для потокового вычисления признаков, передайте потоковый объект DataFrame в качестве аргумента в метод write_table. Этот метод возвращает объект StreamingQuery.

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

Чтение из функции table

Используйте read_table для чтения функции values.

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

Функция поиска и просмотра tables

Используйте пользовательский интерфейс Магазина компонентов для поиска или просмотра функций tables.

  1. На боковой панели откройте selectХранилище компонентов > машинного обучения для отображения его пользовательского интерфейса.

  2. В поле поиска введите все или часть имени компонента table, компонента или источника данных, используемого для вычисления признаков. Можно также ввести весь ключ или значение тега либо их часть. В тексте поиска регистр не учитывается.

    Пример поиска признаков

Get функция table метаданные

API для метаданных функции gettable зависит от версии среды выполнения Databricks, которую вы используете. В версии 0.3.6 и более поздних версиях используйте get_table. В версии 0.3.5 и более ранних версиях используйте 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")

Работа с тегами компонентов table

Теги — это пары "ключ-значение", которые можно создавать и использовать для поиска возможностей tables. Теги можно создавать, изменять и удалять с помощью пользовательского интерфейса хранилища признаков или API Python для хранилища признаков.

Работа с тегами функции table в интерфейсе пользователя

Используйте пользовательский интерфейс Магазина компонентов для поиска или просмотра функций tables. Чтобы получить доступ к пользовательскому интерфейсу, на боковой панели select> Хранилище компонентов машинного обучения.

Добавление тега с помощью пользовательского интерфейса хранилища признаков

  1. Щелкните Значок тега , если он еще не открыт. Появляется тег table.

    тега

  2. Щелкните поля Имя и Значение и введите ключ и значение для тега.

  3. Нажмите кнопку Добавить.

Изменение или удаление тега с помощью пользовательского интерфейса хранилища признаков

Чтобы изменить или удалить существующий тег, используйте значки в разделе действий column.

Действия с тегами

Работа с тегами функций table с помощью API Python хранилища компонентов

В кластерах под управлением версии 0.4.1 и более поздних версий можно создавать, изменять и удалять теги с помощью API Python для хранилища признаков.

Требования

Клиент хранилища признаков версии 0.4.1 и выше

Создание компонента table с тегом с помощью API Python в Магазине компонентов

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", ...},
  ...
)

Добавьте, updateи удалите теги с помощью Python API в Feature Store.

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

Update источники данных для компонента table

Хранилище компонентов автоматически отслеживает источники данных, используемые для вычислений компонентов. Вы также можете вручную update источники данных с помощью Python API для хранилища фич.

Требования

Клиент хранилища признаков версии 0.5.0 и выше

Добавление источников данных с помощью API Python для хранилища компонентов

Ниже приводится несколько примеров команд. Дополнительные сведения см. в документации по 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")

Удаление источников данных с помощью API Python для хранилища компонентов

Дополнительные сведения см. в документации по API.

Примечание.

Следующая команда удаляет источники данных всех типов ("table", "path" и "custom"), которые соответствуют именам источников.

from databricks.feature_store import FeatureStoreClient
fs = FeatureStoreClient()
fs.delete_data_sources(feature_table_name="clicks", sources_names="user_info.clicks")

Удаление компонента table

Вы можете удалить функцию с помощью пользовательского интерфейса магазина компонентов или API Python для хранилища компонентов.

Примечание.

  • Удаление функции table может привести к непредвиденным сбоям у производителей на предыдущих этапах и потребителей на последующих этапах (модели, конечные точки и запланированные задания). Вам нудно удалить опубликованные интернет-магазины с поставщиком облачных служб.
  • При удалении фичи table с помощью API также удаляется основная структура Delta table. При удалении функции table из интерфейса необходимо отдельно удалить базовую дельту table.

Удаление компонента table с помощью пользовательского интерфейса

  1. На странице table функции нажмите кнопку Кнопка вниз справа от имени функции table и selectудалить. Если у вас нет разрешения CAN MANAGE для функции table, этот параметр не отображается.

    Select удалить из раскрывающегося меню

  2. В диалоговом окне "Удалить функцию Table" нажмите Удалить, чтобы подтвердить.

  3. Если вы также хотите удалить основной элемент Delta table, выполните следующую команду в блокноте.

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

Удаление функции table с помощью API Python для хранилища компонентов

С помощью клиента Магазина компонентов версии 0.4.1 и более поздних версий можно использовать drop_table для удаления функции table. При удалении table с помощью drop_tableтакже удаляется и базовый разностный table.

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