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


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

Примечание.

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

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

Примечание.

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

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

Примечание.

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

Создание базы данных для таблиц признаков

Прежде чем создавать какие-либо таблицы признаков, необходимо создать базу данных для их хранения.

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

Таблицы признаков хранятся в виде разностных таблиц. При создании таблицы признаков с помощью create_table (клиент хранилища признаков версии 0.3.6 и более поздних версий) или create_feature_table (версии 0.3.5 и ниже) необходимо указать имя базы данных. Например, этот аргумент создает разностную таблицу с именем customer_features в базе данных recommender_system.

name='recommender_system.customer_features'

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

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

Создание таблицы признаков в хранилище признаков Databricks

Примечание.

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

Ниже приведены основные действия по созданию таблицы признаков.

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

Дополнительные сведения о командах и параметрах, используемых в следующих примерах, см . в справочнике по 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'
)

Регистрация существующей разностной таблицы в качестве таблицы признаков

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

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

Управление доступом к таблицам признаков

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

Обновление таблицы признаков

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

Обновить следующие метаданные таблицы признаков невозможно:

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

Добавление новых признаков в существующую таблицу признаков

Добавить новые признаки в существующую таблицу признаков можно одним из двух способов.

  • Обновите существующую функцию вычисления признаков и выполните write_table с возвращенным объектом DataFrame. При этом обновляется схема таблицы признаков и объединяются значения новых признаков на основе первичного ключа.
  • Создайте новую функцию вычисления признаков для расчета новых значений признаков. Объект DataFrame, возвращаемый этой новой функцией вычисления, должен содержать первичные ключи и ключи секций для таблиц признаков (если они определены). Выполните write_table с объектом DataFrame, чтобы записать новые признаки в существующую таблицу признаков, используя тот же первичный ключ.

Обновление только отдельных строк в таблице признаков

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

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

Планирование задания для обновления таблицы признаков

Чтобы все признаки в таблицах всегда содержали только актуальные значения, Databricks рекомендует создать задание, которое запускает записную книжку для регулярного (например, каждый день) обновления таблицы признаков. Если у вас уже создано незапланированное задание, его можно преобразовать в запланированное, чтобы обеспечить актуальность значений признаков.

В коде для обновления таблицы признаков используется 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'
)

Сохранение прошлых значений ежедневных признаков

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

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

Затем можно составить код для чтения данных из таблицы признаков с фильтрацией date по нужному периоду.

Вы также можете создать таблицу функций временных рядов, указав date столбец в качестве ключа метки времени с помощью аргумента 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. Система выполняет соединение метки времени с помощью указанного timestamp_lookup_key значения.

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

Создание конвейера потокового вычисления признаков для обновления признаков

Чтобы создать конвейер для потокового вычисления признаков, передайте потоковый объект 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'
)

Чтение из таблицы признаков

Для считывания значений признаков используйте метод read_table.

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

Поиск и просмотр таблиц признаков

Используйте пользовательский интерфейс хранилища признаков для поиска или просмотра таблиц признаков.

  1. На боковой панели выберите Машинное обучение > Хранилище компонентов, чтобы отобразить пользовательский интерфейс хранилища компонентов.

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

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

Получение метаданных таблицы признаков

API для получения метаданных таблицы признаков зависит от используемой вами версии среды выполнения 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")

Работа с тегами таблицы признаков

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

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

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

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

  1. Щелкните Значок тега , если он еще не открыт. Отобразится таблица тегов.

    Таблица тегов

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

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

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

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

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

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

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

Требования

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

Создание таблицы признаков с тегом с помощью 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", ...},
  ...
)

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

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

Обновление источников данных для таблицы компонентов

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

Требования

Клиент хранилища признаков версии 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")

Удаление таблицы признаков

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

Примечание.

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

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

  1. На странице таблицы компонентов щелкните Кнопка справа от имени таблицы компонентов и выберите "Удалить". Если у вас нет разрешения CAN MANAGE для таблицы компонентов, вы не увидите этот параметр.

    Выбор удаления из раскрывающегося меню

  2. В диалоговом окне "Удаление таблицы признаков" нажмите кнопку Удалить для подтверждения.

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

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

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

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

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