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
.