Publicar recurso em um armazenamento on-line
Este artigo descreve como publicar um recurso em um armazenamento on-line para servir o tempo real.
Databricks O recurso Store é compatível com estas lojas on-line:
armazenamento online provider | Publicar com recurso engenharia em Unity Catalog | Publicar com o recurso Store do espaço de trabalho herdado | Recurso lookup in Legacy MLflow servindo modelo | recurso lookup in servindo modelo |
---|---|---|---|---|
Amazon DynamoDB | X | X (recurso Store client v0.3.8 e acima) | X | X |
Amazon Aurora (compatível com MySQL) | X | X | ||
Amazon RDS MySQL | X | X |
O armazenamento on-line do DynamoDB usa um esquema diferente do armazenamento off-line. Especificamente, no armazenamento on-line, a chave primária é armazenada como uma combinação key na coluna _feature_store_internal__primary_keys
.
Para garantir que o recurso Store possa acessar o armazenamento on-line do DynamoDB, o senhor deve criar a tabela no armazenamento on-line usando publish_table()
. Não crie manualmente uma tabela dentro do DynamoDB. publish_table()
faz isso para você automaticamente.
Publicar lotes-compute recurso em um armazenamento on-line
O senhor pode criar e programar um Databricks Job para publicar regularmente recursos atualizados. Esse Job também pode incluir o código para calcular o recurso atualizado, ou o senhor pode criar e executar um Job separado para calcular e publicar atualizações de recurso.
Para as lojas SQL, o código a seguir pressupõe que um banco de dados on-line chamado "recommender_system" já existe no armazenamento on-line e corresponde ao nome do armazenamento off-line. Se não houver uma tabela chamada “customer_features” no banco de dados, esse código cria uma. Ele também pressupõe que os recursos são computados todos os dias e armazenados como uma coluna particionada _dt
.
O código a seguir pressupõe que o senhor tenha criado segredos para acessar esse armazenamento on-line.
Se estiver usando o DynamoDB, o site Databricks recomenda que o senhor forneça autenticação de gravação por meio de um instance profile anexado a um clustering Databricks. O instance profile só pode ser usado para publicar recurso; para procurar valores de recurso, o senhor deve usar os segredos do Databricks.
- DynamoDB
- SQL stores
DynamoDB support is available in all versions of Feature Engineering in Unity Catalog client, and Feature Store client v0.3.8 and above.
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 o recurso de transmissão em um armazenamento on-line
Para transmitir continuamente o recurso para o armazenamento on-line, 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 o recurso selecionado em um armazenamento on-line
Para publicar apenas um recurso selecionado no armazenamento on-line, use o argumento features
para especificar o(s) nome(s) do(s) recurso(s) a ser(em) publicado(s). A chave primária e a chave de registro de data e hora são sempre publicadas. Se o senhor não especificar o argumento features
ou se o valor for None (Nenhum), todos os recursos da tabela de recursos off-line serão publicados.
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 recurso em um banco de dados específico
Na especificação do armazenamento on-line, especifique o nome do banco de dados (database_name
) e o nome da tabela (table_name
). Se o senhor não especificar esses parâmetros, serão usados o nome do banco de dados off-line e o nome da tabela de recurso. database_name
já deve existir no armazenamento on-line.
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>'
)
Substituir uma tabela de recurso on-line existente ou linhas específicas
Use mode='overwrite'
na chamada publish_table
. A tabela on-line é completamente substituída pelos dados na tabela off-line.
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 sobrescrever somente 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 on-line
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
)
drop_online_table
exclui a tabela publicada do armazenamento on-line. Ele não exclui a tabela de recursos em Databricks.- Antes de excluir uma tabela publicada, o senhor deve se certificar de que a tabela não é usada para pesquisa de modelo de recurso e não tem outras dependências downstream. A exclusão é irreversível e pode causar falhas nas dependências.
- Para verificar se há dependências, considere girar a chave da tabela publicada que o senhor planeja excluir por um dia antes de executar
drop_online_table
.