Работа с таблицами компонентов в хранилище компонентов рабочей области (устаревшая версия)
Примечание.
В этой документации рассматривается хранилище компонентов рабочей области. Databricks рекомендует использовать проектирование компонентов в каталоге Unity. Функция Feature Store в рабочей области будет снята с поддержки в будущем.
Сведения о работе с таблицами компонентов в каталоге Unity см. в статье Работа с таблицами компонентов в каталоге 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 в качестве таблицы признаков.
Ниже приведены основные действия по созданию таблицы признаков.
- Напишите функции Python для вычисления признаков. Выходные данные каждой функции должны представлять собой объект DataFrame Apache Spark с уникальным первичным ключом. Первичный ключ может состоять из одного или нескольких столбцов.
- Создайте таблицу признаков путем создания экземпляра
FeatureStoreClient
и использованияcreate_table
(версии 0.3.6 и выше) илиcreate_feature_table
(версии 0.3.5 и ниже). - Заполните таблицу признаков с помощью
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 и более поздних версиях можно зарегистрировать существующую разностную таблицу как таблицу признаков. Разностная таблица должна существовать в хранилище метаданных.
Примечание.
Чтобы обновить зарегистрированную таблицу признаков, необходимо использовать API Python для хранилища признаков.
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 рекомендует создать задание, которое запускает записную книжку для регулярного (например, каждый день) обновления таблицы признаков. Если у вас уже создано незапланированное задание, его можно преобразовать в запланированное, чтобы обеспечить актуальность значений признаков. См. раздел обзор оркестрации в системе 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
. Система выполняет соединение с меткой времени as-of, используя указанный вами 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',
)
Поиск и просмотр таблиц признаков
Используйте пользовательский интерфейс хранилища признаков для поиска или просмотра таблиц признаков.
На боковой панели выберите Машинное обучение > Хранилище компонентов, чтобы отобразить пользовательский интерфейс хранилища компонентов.
В поле поиска введите имя или часть имени таблицы признаков, признака или источника данных, используемых для вычисления признаков. Можно также ввести весь ключ или значение тега либо их часть. В тексте поиска регистр не учитывается.
Получение метаданных таблицы признаков
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 для хранилища признаков.
Работа с тегами таблицы признаков в пользовательском интерфейсе
Используйте пользовательский интерфейс хранилища признаков для поиска или просмотра таблиц признаков. Чтобы получить доступ к пользовательскому интерфейсу, на боковой панели выберите Машинное обучение > Хранилище компонентов.
Добавление тега с помощью пользовательского интерфейса хранилища признаков
Щелкните
, если он еще не открыт. Появится таблица тегов.
таблица тегов
Щелкните поля Имя и Значение и введите ключ и значение для тега.
Нажмите кнопку Добавить.
Изменение или удаление тега с помощью пользовательского интерфейса хранилища признаков
Чтобы изменить или удалить существующий тег, используйте значки в столбце Действия.
Работа с тегами таблицы признаков с помощью 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.
Удаление таблицы компонентов с помощью пользовательского интерфейса
На странице таблицы компонентов щелкните
справа от имени таблицы компонентов и выберите "Удалить". Если у вас нет разрешения CAN MANAGE для таблицы компонентов, вы не увидите этот параметр.
В диалоговом окне "Удаление таблицы признаков" нажмите кнопку Удалить для подтверждения.
Если вы также хотите удалить базовую таблицу 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'
)