Trabalhar com tabelas de recurso no espaço de trabalho recurso Store (legado)
Esta documentação abrange o recurso Store do espaço de trabalho. Databricks recomenda o uso do recurso engenharia em Unity Catalog. workspace recurso Store será preterido no futuro.
Para obter informações sobre como trabalhar com tabelas de recursos em Unity Catalog, consulte Work with recurso tables in Unity Catalog.
Esta página descreve como criar e trabalhar com tabelas de recurso no espaço de trabalho recurso Store.
Se o seu workspace estiver habilitado para Unity Catalog, qualquer tabela gerenciada por Unity Catalog que tenha um key primário é automaticamente uma tabela de recurso que o senhor pode usar para treinamento e inferência de modelos. Todos os recursos do site Unity Catalog, como segurança, linhagem, marcação e acesso cruzadoworkspace, estão automaticamente disponíveis para a tabela de recursos. Para obter informações sobre como trabalhar com tabelas de recursos em um site Unity Catalog-enabled workspace, consulte Work with recurso tables in Unity Catalog.
Para obter informações sobre o acompanhamento do recurso lineage e freshness, consulte Discover recurso and track recurso lineage in workspace recurso Store (legacy).
Os nomes das tabelas de banco de dados e de recurso podem conter apenas caracteres alfanuméricos e o sublinhado (_).
Criar um banco de dados para tabelas de recurso
Antes de criar qualquer tabela de recurso, o senhor deve criar um banco de dados para armazená-las.
%sql CREATE DATABASE IF NOT EXISTS <database-name>
As tabelas de recurso são armazenadas como tabelasDelta. Ao criar uma tabela de recurso com create_table
(recurso Store client v0.3.6 e acima) ou create_feature_table
(v0.3.5 e abaixo), o senhor deve especificar o nome do banco de dados. Por exemplo, esse argumento cria uma tabela Delta chamada customer_features
no banco de dados recommender_system
.
name='recommender_system.customer_features'
Ao publicar uma tabela de recurso em um armazenamento on-line, a tabela default e o nome do banco de dados são os especificados quando a tabela foi criada; é possível especificar nomes diferentes usando o método publish_table
.
A UI do Databricks recurso Store mostra o nome da tabela e do banco de dados no armazenamento on-line, juntamente com outros metadados.
Criar uma tabela de recursos em Databricks recurso Store
O senhor também pode registrar uma tabelaDelta existente como uma tabela de recurso. Veja o registro de uma tabela Delta existente como uma tabela de recurso.
As etapas básicas para criar uma tabela de recursos são as seguintes:
- Escreva as funções Python para compute o recurso. O resultado de cada função deve ser um Apache Spark DataFrame com um key primário exclusivo. O key primário pode consistir em uma ou mais colunas.
- Crie uma tabela de recursos instanciando um
FeatureStoreClient
e usandocreate_table
(v0.3.6 e acima) oucreate_feature_table
(v0.3.5 e abaixo). - Preencha a tabela de recursos usando o site
write_table
.
Para obter detalhes sobre o comando e os parâmetros usados nos exemplos a seguir, consulte a referência do recurso Store Python API.
- V0.3.6 and above
- V0.3.5 and below
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'
)
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'
)
registro de uma tabela Delta existente como uma tabela de recurso
Com a v0.3.8 e acima, o senhor pode registrar uma tabelaDelta existente como uma tabela de recurso. A tabela Delta deve existir no metastore.
Para atualizar uma tabela de recurso registrada, o senhor deve usar o recurso Store Python API .
fs.register_table(
delta_table='recommender.customer_features',
primary_keys='customer_id',
description='Customer features'
)
Controle o acesso às tabelas de recursos
Consulte Controle de acesso a tabelas de recurso no espaço de trabalho Recurso Store (legado).
Atualizar uma tabela de recursos
O senhor pode atualizar uma tabela de recursos adicionando novos recursos ou modificando linhas específicas com base no primário key.
Os metadados da tabela de recursos a seguir não podem ser atualizados:
- Chave primária
- partitionKey
- Nome ou tipo de um recurso existente
Adicionar um novo recurso a uma tabela de recursos existente
O senhor pode adicionar novos recursos a uma tabela de recursos existente de duas maneiras:
- Atualize a função de computação de recurso existente e a execução
write_table
com o retorno DataFrame. Isso atualiza o esquema da tabela de recursos e mescla novos valores de recurso com base no primário key. - 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 a chave primária e a chave de partição das tabelas de recurso (se definidas). execução
write_table
com o DataFrame para gravar o novo recurso na tabela de recursos existente, usando o mesmo primário key.
Atualizar apenas linhas específicas em uma tabela de recurso
Use mode = "merge"
em write_table
. As linhas cujo key primário não existe no DataFrame enviado na chamada write_table
permanecem inalteradas.
fs.write_table(
name='recommender.customer_features',
df = customer_features_df,
mode = 'merge'
)
Programar um Job para atualizar uma tabela de recursos
Para garantir que as tabelas de recursos tenham sempre os valores mais recentes, o site Databricks recomenda que o senhor crie um trabalho que execute um Notebook para atualizar a tabela de recursos regularmente, por exemplo, todos os dias. Se o senhor já tiver criado um trabalho não programado, poderá convertê-lo em um trabalho programado para garantir que os valores de recurso estejam sempre atualizados. Veja a orquestração usando Databricks Jobs.
O código para atualizar uma tabela de recurso 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'
)
Armazenar valores anteriores do recurso diário
Definir uma tabela de recurso com um primário composto key. Inclua a data no site key. Por exemplo, para uma tabela de recurso store_purchases
, o senhor pode usar um primário composto key (date
, user_id
) e uma partição key 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, o senhor pode criar um código para ler a tabela de recursos filtrando date
para o período de tempo de interesse.
O senhor também pode criar uma tabela de recurso de série temporal especificando a coluna date
como um carimbo de data/hora key 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 pontuais quando você usa create_training_set
ou score_batch
. O sistema executa um registro de data e hora join, usando o timestamp_lookup_key
que o senhor especificar.
Para manter a tabela de recursos atualizada, configure um Job programado regularmente para gravar recursos ou transmitir novos valores de recursos para a tabela de recursos.
Criar uma computação de transmissão de recurso pipeline para atualizar o recurso
Para criar uma computação de recurso de transmissão pipeline, passe uma transmissão DataFrame
como argumento para write_table
. Esse método retorna um objeto 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'
)
Ler de uma tabela de recursos
Use o site read_table
para ler os valores do recurso.
fs = feature_store.FeatureStoreClient()
customer_features_df = fs.read_table(
name='recommender.customer_features',
)
Pesquisar e procurar tabelas de recursos
Use a UI do recurso Store para pesquisar ou procurar tabelas de recurso.
-
Na barra lateral, selecione Machine Learning > recurso Store para exibir a interface do usuário do recurso Store.
-
Na caixa de pesquisa, digite todo ou parte do nome de uma tabela de recursos, um recurso ou uma fonte de dados usada para o cálculo de recursos. O senhor também pode inserir todo ou parte do key ou o valor de uma tag. O texto de pesquisa não diferencia maiúsculas de minúsculas.
Obter metadados da tabela de recursos
A API para obter metadados da tabela de recursos depende da versão do Databricks Runtime que você está usando. Com v0.3.6e acima, use get_table
. Com v0.3.5 e abaixo, 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 recurso
As tags são par key-value que o senhor pode criar e usar para pesquisar tabelas de recursos. O senhor pode criar, editar e excluir tags usando a UI do recurso Store ou o recurso Store Python API .
Trabalhar com tags de tabela de recurso na UI
Use a UI do recurso Store para pesquisar ou procurar tabelas de recurso. Para acessar a interface do usuário, na barra lateral, selecione Machine Learning > recurso Store .
Adicionar uma tag usando a UI do recurso Store
-
Clique
se ainda não estiver aberto. A tabela de tags é exibida.
-
Clique nos campos Name e Value e digite key e o valor da tag.
-
Clique em Adicionar .
Editar ou excluir uma tag usando a UI do Recurso Store
Para editar ou excluir uma tag existente, use os ícones na coluna Ações .
Trabalhar com tags de tabela de recurso usando o recurso Store Python API
No clustering com a versão 0.4.1 e acima, o senhor pode criar, editar e excluir tags usando o recurso Store Python API .
Requisitos
cliente da loja de recurso v0.4.1e acima
Criar tabela de recurso com tag usando o recurso Store Python API
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 o recurso Store Python API
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 fonte de dados para uma tabela de recursos
O recurso store rastreia automaticamente a fonte de dados usada para compute recurso. O senhor também pode atualizar manualmente a fonte de dados usando o recurso Store Python API .
Requisitos
cliente da loja de recurso v0.5.0e acima
Adicionar fonte de dados usando o recurso Store Python API
abaixo são alguns exemplos de comando. 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 a fonte de dados usando o recurso Store Python API
Para obter detalhes, consulte a documentação da API.
O comando a seguir exclui fontes de dados de todos os tipos ("table", "path" e "custom") que correspondem aos nomes das fontes.
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 recurso
O senhor pode excluir uma tabela de recurso usando a UI do recurso Store ou o recurso Store Python API .
- A exclusão de uma tabela de recursos pode levar a falhas inesperadas em produtores upstream e consumidores downstream (modelos, endpoint e trabalho agendado). Você deve excluir lojas online publicadas com seu provedor de nuvem.
- Quando o senhor exclui uma tabela de recurso usando o API, a tabela subjacente Delta também é descartada. Quando o senhor exclui uma tabela de recurso da UI, deve excluir a tabela subjacente Delta separadamente.
Excluir uma tabela de recurso usando a UI
-
Na página da tabela de recursos, clique em
à direita do nome da tabela de recursos e selecione Delete (Excluir ). Se o senhor não tiver permissão CAN MANAGE para a tabela de recursos, não verá essa opção.
-
Na caixa de diálogo Excluir tabela de recursos, clique em Excluir para confirmar.
-
Se o senhor também quiser eliminar a tabela subjacente Delta, execute o seguinte comando em um Notebook.
SQL%sql DROP TABLE IF EXISTS <feature-table-name>;
Excluir uma tabela de recurso usando o recurso Store Python API
Com o cliente Feature Store v0.4.1e acima, 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'
)