Partilhar via


Trabalhar com a funcionalidade tables no Repositório de Funcionalidades de Espaço de Trabalho (legado)

Nota

Esta documentação abrange o Workspace Feature Store. A Databricks recomenda o uso do Feature Engineering no Unity Catalog. O Feature Store do Espaço de Trabalho será descontinuado no futuro.

Para obter informações sobre como trabalhar com a funcionalidade tables no Unity Catalog, consulte Trabalhar com a funcionalidade tables no Unity Catalog.

Esta página descreve como criar e trabalhar com a característica tables no Repositório de Características do Espaço de Trabalho.

Nota

Se seu espaço de trabalho estiver habilitado para o Unity Catalog, qualquer table gerenciado pelo Unity Catalog que tenha uma chave primária será automaticamente um recurso table que você pode usar para treinamento e inferência de modelos. Todos os recursos do Unity Catalog, como segurança, linhagem, marcação e acesso entre espaços de trabalho, estão automaticamente disponíveis para o recurso table. Para obter informações sobre como trabalhar com a funcionalidade tables num espaço de trabalho com Unity Catalogativado, consulte Trabalhar com a funcionalidade tables no Unity Catalog.

Para informações sobre como acompanhar a linhagem e a atualidade das características, consulte Descobrir características e rastrear a linhagem de características no Workspace Feature Store (legado).

Nota

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

Criar uma base de dados para a funcionalidade tables

Antes de criar qualquer recurso tables, você deve criar um banco de dados para armazená-los.

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

A funcionalidade tables é armazenada como Delta tables. Ao criar uma funcionalidade table com create_table (cliente do Feature Store v0.3.6 e superior) ou create_feature_table (v0.3.5 e inferior), deves especificar o nome da base de dados. Por exemplo, este argumento cria um table Delta chamado customer_features na base de dados recommender_system.

name='recommender_system.customer_features'

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

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

Criar uma funcionalidade table no Databricks Feature Store

Nota

Você também pode registrar um Delta table existente como um recurso table. Veja Registar um table Delta existente como um recurso table.

As etapas básicas para criar um recurso table 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 um ou mais columns.
  2. Crie um recurso table instanciando um FeatureStoreClient e usando create_table (v0.3.6 e superior) ou create_feature_table (v0.3.5 e abaixo).
  3. Preencha o recurso table usando write_table.

Para obter detalhes sobre os comandos e parameters 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 um table Delta existente como um recurso table

Com a v0.3.8 e superior, pode registar um Delta table existente como um recurso table. O table Delta deve existir no metastore.

Nota

Para update um recurso registrado table, você deve usar a API Python do Feature Store.

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

Controle o acesso ao recurso tables

Consulte Controlar o acesso à funcionalidade tables no Repositório de Funcionalidades do Espaço de Trabalho (legado).

Update um recurso table

Você pode update um recurso table adicionando novos recursos ou modificando linhas específicas com base na chave primária.

A funcionalidade seguinte, relacionada ao metadados table, não pode ser atualizada:

  • Chave primária
  • Partition chave
  • Nome ou tipo de um recurso existente

Adicionar novos recursos a um recurso existente table

Você pode adicionar novas funcionalidades a uma funcionalidade existente table de duas maneiras:

  • Update a função existente de cálculo de recursos e execute write_table com o DataFrame retornado. Isso atualiza a função tableschema e mescla a nova função values com base na chave primária.
  • Crie uma nova função de cálculo de característica para calcular a nova característica values. O DataFrame retornado por esta nova função de computação deve conter as chaves primárias da funcionalidade tablese as chaves partition (se definidas). Execute write_table com o DataFrame para gravar os novos recursos no recurso existente table, usando a mesma chave primária.

Update apenas linhas específicas de uma funcionalidade table

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 uma tarefa para update fazer uma funcionalidade table

Para garantir que as funcionalidades na funcionalidade tables tenham sempre o valuesmais recente, a Databricks recomenda criar um trabalho que execute um notebook para update a sua funcionalidade table regularmente, como diariamente. Se já tiveres uma tarefa não agendada criada, podes convertê-la numa tarefa agendada para assegurar que os values do recurso estejam sempre up-toatualizados. Consulte Programar e orquestrar fluxos de trabalho.

Código para update um recurso table 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 values anteriores de recursos diários

Defina um recurso table com uma chave primária composta. Inclua a data na chave primária. Por exemplo, para um recurso tablestore_purchases, você pode usar uma chave primária composta (date, user_id) e partition chave date 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 do recurso table filtragem date para o período de tempo de interesse.

Você também pode criar uma característica de série temporal table especificando o datecolumn como chave de timestamp usando o argumento 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'
)

Isso permite pesquisas point-in-time quando você usa create_training_set ou score_batch. O sistema executa um as-of carimbo de data/hora join, usando o timestamp_lookup_key que especificar.

Para manter o recurso table atualizado, set um trabalho agendado regularmente para escrever recursos ou transmitir novas values de recursos para o recurso table.

Criar um pipeline de cálculo de funcionalidades de streaming para update funcionalidades

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 um recurso table

Use read_table para ler a funcionalidade values.

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

Funcionalidade de pesquisa e navegação tables

Use a interface do Feature Store para pesquisar ou procurar características tables.

  1. Na barra lateral, selectAprendizado de Máquina > Feature Store para exibir a interface do usuário do Feature Store.

  2. Na caixa de pesquisa, digite todo ou parte do nome de um recurso table, 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.

    Exemplo de pesquisa de recursos

Get funcionalidade table metadados

A API para get recurso table metadados 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 recursos table

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

Trabalhe com tags de table de funcionalidades na interface de utilizador

Use a interface de utilizador do Feature Store para pesquisar ou procurar características tables. Para acessar a interface do usuário, na barra lateral, selectAprendizado de Máquina > Feature Store.

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

  1. Clique se Ícone de etiqueta ainda não estiver aberto. A tag table aparece.

    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 eliminar uma tag existente, use os ícones nas Açõescolumn.

ações de tag

Trabalhar com as tags de table de características 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 a funcionalidade table com etiqueta 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, updatee apagar etiquetas 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")

Update fontes de dados para um recurso table

O repositório de recursos rastreia automaticamente as fontes de dados usadas para calcular recursos. Você também pode update 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 ("table", "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 um recurso table

Você pode eliminar uma funcionalidade table usando a interface do usuário do Feature Store ou a API Python do Feature Store.

Nota

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

Excluir um recurso table usando a interface do usuário

  1. Na página de recurso table, clique no botão Down à direita do nome do recurso table e no botão selectExcluir. Se você não tiver permissão CAN MANAGE para o recurso table, você não verá essa opção.

    Select excluir do menu suspenso

  2. Na caixa de diálogo Excluir Recurso Table, clique em Excluir para confirmar.

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

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

Excluir um recurso table 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 um recurso table. Quando se elimina um table com drop_table, o Delta table subjacente também é eliminado.

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