Publicar recursos para um armazenamento online

Este artigo descreve como publicar recursos em um armazenamento online para serviço em tempo real.

Databricks recurso Store oferece suporte a estas lojas online:

provedor de armazenamento on-line

Publicar com recurso Engenharia no Unity Catalog

Publicar com o recurso Store do espaço de trabalho herdado

Pesquisa de recursos na Model ServingMLflow legado

Pesquisa de recursos no Model Serving

Amazon DynamoDB

x

X (cliente de recurso Store v0.3.8 e acima)

x

x

Amazon Aurora (compatível com MySQL)

x

x

Amazon RDS MySQL

x

x

Observação

O armazenamento online do DynamoDB usa um esquema diferente do armazenamento offline. Especificamente, no armazenamento online, key primárias são armazenadas como uma key combinada na coluna _feature_store_internal__primary_keys.

Para garantir que o repositório de recursos possa acessar o armazenamento online do DynamoDB, você deve criar a tabela no armazenamento online usando publish_table(). Não crie manualmente uma tabela dentro do DynamoDB. publish_table() faz isso para você automaticamente.

Publique recursos calculados em lotes para um armazenamento online

Você pode criar e programar um Job do Databricks para publicar regularmente recursos atualizados. Este Job também pode incluir o código para calcular os recursos atualizados ou você pode criar e executar Job separado para calcular e publicar atualizações de recursos.

Para armazenamentos SQL, o seguinte código assume que um banco de dados online denominado “recommender_system” já existe no armazenamento online e corresponde ao nome do armazenamento offline. Se não houver nenhuma tabela denominada “customer_features” no banco de dados, esse código criará uma. Ele também assume que os recursos são compute diariamente e armazenados como uma coluna particionada _dt.

O código a seguir pressupõe que você criou segredos para acessar este armazenamento online.

Se você estiver usando o DynamoDB, o Databricks recomenda que você forneça autenticação de gravação por meio de um instance profile anexado a clustersdo Databricks. O instance profile só pode ser usado para publicar recursos; para pesquisar valores de recursos, você deve usar segredos do Databricks.

O suporte ao DynamoDB está disponível em todas as versões do recurso engenharia no cliente Unity Catalog e no cliente recurso Store v0.3.8 e acima.

import datetime
from databricks.feature_engineering.online_store_spec import AmazonDynamoDBSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store

# do not pass `write_secret_prefix` if you intend to use the instance profile attached to the cluster.
online_store = AmazonDynamoDBSpec(
  region='<region>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)
import datetime
from databricks.feature_store.online_store_spec import AmazonRdsMySqlSpec

online_store = AmazonRdsMySqlSpec(
  hostname='<hostname>',
  port='<port>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

Publicar recursos transmitidos para um armazenamento online

Para recursos continuamente transmitidos para o armazenamento online, defina streaming=True.

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  streaming=True
)

Publicar recursos selecionados em um armazenamento online

Para publicar apenas recursos selecionados no armazenamento online, use o argumento features para especificar o(s) nome(s) do(s) recurso(s) a publicar. key primária e key carimbo de data/hora são sempre publicadas. Se você não especificar o argumento features ou se o valor for Nenhum, todos os recursos da tabela de recursos offline serão publicados.

Observação

Toda a tabela off-line deve ser uma tabela de recurso válida, mesmo que o senhor esteja publicando apenas um subconjunto de recurso em um armazenamento on-line. Se a tabela off-line contiver tipos de dados não suportados, o senhor não poderá publicar um subconjunto de recursos dessa tabela em um armazenamento on-line.

fe.publish_table( # or fs.publish_table for Workspace Feature Store
  name='ml.recommender_system.customer_features',
  online_store=online_store,
  features=["total_purchases_30d"]
)

Publicar uma tabela de recursos em um banco de dados específico

Na especificação de armazenamento online, especifique o nome do banco de dados (database_name) e o nome da tabela (table_name). Se você não especificar esses parâmetros, o nome do banco de dados off-line e o nome da tabela de recursos serão usados. database_name já deve existir no armazenamento online.

online_store = AmazonRdsMySqlSpec(
  hostname='<hostname>',
  port='<port>',
  database_name='<database-name>',
  table_name='<table-name>',
  read_secret_prefix='<read-scope>/<prefix>',
  write_secret_prefix='<write-scope>/<prefix>'
)

Sobrescrever uma tabela de recursos on-line existente ou linhas específicas

Use mode='overwrite' na chamada publish_table . A tabela online é completamente substituída pelos dados da tabela offline.

Observação

O Amazon DynamoDB não oferece suporte ao modo de substituição.

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  mode='overwrite'
)

Para substituir apenas algumas linhas, use o argumento filter_condition :

fs.publish_table(
  name='recommender_system.customer_features',
  online_store=online_store,
  filter_condition=f"_dt = '{str(datetime.date.today())}'",
  mode='merge'
)

Excluir uma tabela publicada de um armazenamento online

Com o cliente Store de recursos v0.12.0e acima, você pode usar drop_online_table para excluir uma tabela publicada de um armazenamento online. Quando você exclui uma tabela publicada com drop_online_table, a tabela é excluída de seu provedor de armazenamento online e os metadados de armazenamento online são removidos do Databricks.

fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
  name='recommender_system.customer_features',
  online_store = online_store
)

Observação

  • drop_online_table exclui a tabela publicada do armazenamento online. Ele não exclui a tabela de recursos no Databricks.

  • Antes de excluir uma tabela publicada, você deve garantir que a tabela não seja usada para pesquisa de recurso Model Serving e não tenha outras dependências downstream. A exclusão é irreversível e pode causar falha nas dependências.

  • Para verificar se há dependências, considere alternar a key da tabela publicada que você planeja excluir um dia antes de executar drop_online_table.