Share via


Trabalhar com recursos no Repositório de Recursos de Espaço de Trabalho

Nota

Esta documentação abrange o Workspace Feature Store. A Databricks recomenda o uso da Engenharia de Recursos no Unity Catalog. O Repositório de Recursos de Espaço de Trabalho será preterido no futuro.

Esta página descreve como criar e trabalhar com tabelas de recursos no Repositório de Recursos de Espaço de Trabalho.

Nota

Se seu espaço de trabalho estiver habilitado para o Unity Catalog, qualquer tabela gerenciada pelo Unity Catalog que tenha uma chave primária será automaticamente uma tabela de recursos que você poderá usar para treinamento e inferência de modelos. Todos os recursos do Catálogo Unity, como segurança, linhagem, marcação e acesso entre espaços de trabalho, estão automaticamente disponíveis para a tabela de recursos. Para obter informações sobre como trabalhar com tabelas de recursos em um espaço de trabalho habilitado para catálogo Unity, consulte Engenharia de recursos no catálogo Unity.

Para obter informações sobre como rastrear linhagem e atualização de recursos, consulte Descobrir recursos e rastrear linhagem de recursos.

Nota

Os nomes de banco de dados e tabela de recursos podem conter apenas caracteres alfanuméricos e sublinhados (_).

Criar um banco de dados para tabelas de recursos

Antes de criar qualquer tabela de recursos, você deve criar um banco de dados para armazená-las.

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

As tabelas de recursos são armazenadas como tabelas Delta. Ao criar uma tabela de recursos com create_table (cliente do Feature Store v0.3.6 e superior) ou create_feature_table (v0.3.5 e inferior), você deve especificar o nome do banco de dados. Por exemplo, esse argumento cria uma tabela Delta nomeada customer_features no banco de dados recommender_system.

name='recommender_system.customer_features'

Quando você publica uma tabela de recursos em uma loja online, a tabela padrão e o nome do banco de dados são os especificados quando você criou a tabela; Você pode especificar nomes diferentes usando o publish_table método.

A interface do usuário do Databricks Feature Store mostra o nome da tabela e do banco de dados na loja online, juntamente com outros metadados.

Criar uma tabela de recursos no Databricks Feature Store

Nota

Você também pode registrar uma tabela Delta existente como uma tabela de recursos. Consulte Registrar uma tabela Delta existente como uma tabela de recursos.

As etapas básicas para criar uma tabela de recursos são:

  1. Escreva as funções Python para calcular os recursos. A saída de cada função deve ser um Apache Spark DataFrame com uma chave primária exclusiva. A chave primária pode consistir em uma ou mais colunas.
  2. Crie uma tabela de recursos instanciando a e usando create_table (FeatureStoreClientv0.3.6 e superior) ou create_feature_table (v0.3.5 e abaixo).
  3. Preencha a tabela de recursos usando write_table.

Para obter detalhes sobre os comandos e parâmetros usados nos exemplos a seguir, consulte a referência da API Python do Feature Store.

V0.3.6 e superior

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 e inferior

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

Registrar uma tabela Delta existente como uma tabela de recursos

Com a v0.3.8 e superior, você pode registrar uma tabela Delta existente como uma tabela de recursos. A tabela Delta deve existir no metastore.

Nota

Para atualizar uma tabela de recursos registrada, você deve usar a API Python do Feature Store.

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

Controlar o acesso a tabelas de recursos

Consulte Controlar o acesso a tabelas de recursos.

Atualizar uma tabela de recursos

Você pode atualizar uma tabela de recursos adicionando novos recursos ou modificando linhas específicas com base na chave primária.

Os seguintes metadados da tabela de recursos não podem ser atualizados:

  • Chave primária
  • Chave de partição
  • Nome ou tipo de um recurso existente

Adicionar novos recursos a uma tabela de recursos existente

Você pode adicionar novos recursos a uma tabela de recursos existente de duas maneiras:

  • Atualize a função de computação de recurso existente e execute write_table com o DataFrame retornado. Isso atualiza o esquema da tabela de recursos e mescla novos valores de recursos com base na chave primária.
  • Crie uma nova função de computação de recurso para calcular os novos valores de recurso. O DataFrame retornado por essa nova função de computação deve conter as chaves primárias e as chaves de partição das tabelas de recursos (se definidas). Execute write_table com o DataFrame para gravar os novos recursos na tabela de recursos existente, usando a mesma chave primária.

Atualizar apenas linhas específicas em uma tabela de recursos

Utilização mode = "merge" em write_table. As linhas cuja chave primária não existe no DataFrame enviado na write_table chamada permanecem inalteradas.

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

Agendar um trabalho para atualizar uma tabela de recursos

Para garantir que os recursos nas tabelas de recursos sempre tenham os valores mais recentes, o Databricks recomenda que você crie um trabalho que execute um bloco de anotações para atualizar sua tabela de recursos regularmente, como todos os dias. Se você já tiver um trabalho não agendado criado, poderá convertê-lo em um trabalho agendado para garantir que os valores do recurso estejam sempre atualizados.

O código para atualizar uma tabela de recursos usa mode='merge', conforme mostrado no exemplo a seguir.

fs = FeatureStoreClient()

customer_features_df = compute_customer_features(data)

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

Armazene valores anteriores de recursos diários

Defina uma tabela de recursos com uma chave primária composta. Inclua a data na chave primária. Por exemplo, para uma tabela store_purchasesde recursos, você pode usar uma chave primária composta (date, user_id) e uma chave date de partição para leituras eficientes.

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

Em seguida, você pode criar código para ler a partir da filtragem date da tabela de recursos para o período de tempo de interesse.

Você também pode criar uma tabela de recursos de série temporal especificando a coluna como uma chave de carimbo date de data/hora usando o timestamp_keys argumento.

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

Isso permite pesquisas point-in-time quando você usa create_training_set ou score_batch. O sistema executa uma junção como de carimbo de data/hora, usando o timestamp_lookup_key que você especificar.

Para manter a tabela de recursos atualizada, configure um trabalho agendado regularmente para escrever recursos ou transmita novos valores de recursos para a tabela de recursos.

Criar um pipeline de computação de recurso de streaming para atualizar recursos

Para criar um pipeline de computação de recurso de streaming, passe um streaming DataFrame como argumento para write_table. Esse método retorna um StreamingQuery objeto.

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

Ler a partir de uma tabela de funcionalidades

Use read_table para ler valores de recurso.

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

Pesquisar e procurar tabelas de recursos

Use a interface do usuário do Feature Store para pesquisar ou procurar tabelas de recursos.

  1. Na barra lateral, selecione Repositório de Recursos de Aprendizado > de Máquina para exibir a interface do usuário do Repositório de Recursos .

  2. Na caixa de pesquisa, digite todo ou parte do nome de uma tabela de recursos, um recurso ou uma fonte de dados usada para computação de recursos. Você também pode inserir toda ou parte da chave ou do valor de uma tag. O texto de pesquisa não diferencia maiúsculas de minúsculas.

    Feature search example

Obter metadados da tabela de recursos

A API para obter metadados da tabela de recursos depende da versão de tempo de execução do Databricks que você está usando. Com v0.3.6 e superior, use get_table. Com v0.3.5 e inferior, use 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")

Trabalhar com tags de tabela de recursos

As tags são pares chave-valor que você pode criar e usar para pesquisar tabelas de recursos. Você pode criar, editar e excluir tags usando a interface do usuário do Feature Store ou a API Python do Feature Store.

Trabalhar com tags de tabela de recursos na interface do usuário

Use a interface do usuário do Feature Store para pesquisar ou procurar tabelas de recursos. Para acessar a interface do usuário, na barra lateral, selecione Loja de Recursos de Aprendizado de >Máquina.

Adicionar uma tag usando a interface do usuário do Feature Store

  1. Clique se Tag icon ainda não estiver aberto. A tabela de tags é exibida.

    tag table

  2. Clique nos campos Nome e Valor e insira a chave e o valor da sua tag.

  3. Clique em Adicionar.

Editar ou excluir uma tag usando a interface do usuário do Feature Store

Para editar ou excluir uma tag existente, use os ícones na coluna Ações .

tag actions

Trabalhar com tags de tabela de recursos usando a API Python do Feature Store

Em clusters que executam a v0.4.1 e superior, você pode criar, editar e excluir tags usando a API Python do Feature Store.

Requisitos

Cliente do Feature Store v0.4.1 e superior

Criar tabela de recursos com tag usando a API Python do Feature Store

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

Adicionar, atualizar e excluir tags usando a API Python do 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")

Atualizar fontes de dados para uma tabela de recursos

O repositório de recursos rastreia automaticamente as fontes de dados usadas para calcular recursos. Você também pode atualizar manualmente as fontes de dados usando a API Python do Feature Store.

Requisitos

Cliente do Feature Store v0.5.0 e superior

Adicionar fontes de dados usando a API Python do Feature Store

Abaixo estão alguns exemplos de comandos. Para obter detalhes, consulte a documentação da 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")

Excluir fontes de dados usando a API Python do Feature Store

Para obter detalhes, consulte a documentação da API.

Nota

O comando a seguir exclui fontes de dados de todos os tipos ("tabela", "caminho" e "personalizado") que correspondem aos nomes de origem.

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

Excluir uma tabela de recursos

Você pode excluir uma tabela de recursos usando a interface do usuário do Feature Store ou a API Python do Feature Store.

Nota

  • A exclusão de uma tabela de recursos pode levar a falhas inesperadas em produtores e consumidores a jusante (modelos, pontos finais e trabalhos agendados). Tem de eliminar as lojas online publicadas com o seu fornecedor de serviços na nuvem.
  • Quando você exclui uma tabela de recursos usando a API, a tabela Delta subjacente também é descartada. Ao excluir uma tabela de recursos da interface do usuário, você deve descartar a tabela Delta subjacente separadamente.

Excluir uma tabela de recursos usando a interface do usuário

  1. Na página da tabela de recursos, clique Button Down à direita do nome da tabela de recursos e selecione Excluir. Se você não tiver a permissão CAN MANAGE para a tabela de recursos, não verá essa opção.

    Select delete from drop-down menu

  2. Na caixa de diálogo Excluir Tabela de Recursos, clique em Excluir para confirmar.

  3. Se você também quiser soltar a tabela Delta subjacente, execute o seguinte comando em um bloco de anotações.

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

Excluir uma tabela de recursos usando a API Python do Feature Store

Com o cliente do Feature Store v0.4.1 e superior, você pode usar drop_table para excluir uma tabela de recursos. Quando você exclui uma tabela com drop_table, a tabela Delta subjacente também é descartada.

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