Como trabalhar com exibições de recurso¶
Nota
A API do Snowflake Feature Store está disponível no pacote Snowpark ML Python (snowflake-ml-python
) v1.5.0 e posterior.
Uma exibição de recurso encapsula a transformação de dados brutos em um ou mais recursos relacionados. Todos os recursos em uma exibição de recurso são atualizados no mesmo cronograma. Os armazenamentos de recursos são apoiados por uma tabela de recurso que armazena os recursos.
O Snowflake Feature Store oferece suporte a dois tipos diferentes de exibições de recurso:
Exibição de recurso gerenciada pelo Snowflake: A tabela de recurso é atualizada automaticamente a partir de dados brutos pelo Snowflake de acordo com uma cronograma especificado por você. Uma exibição de recurso é considerada gerenciada pelo Snowflake se você fornecer um cronograma para atualizá-la.
Exibição de recurso externo: Se você não fornecer um cronograma para atualizar a exibição de recurso, ela será considerada externa. Você é responsável por manter a tabela de recurso, atualizando os recursos a partir de dados brutos conforme necessário, por exemplo, usando uma ferramenta como o dbt.
A classe snowflake.ml.feature_store.FeatureView
é a API Python para interagir com exibições de recurso. O construtor FeatureView
aceita um Snowpark DataFrame que contém a lógica de geração de recursos. O DataFrame fornecido também deve conter as colunas join_keys
especificadas nas entidades associadas à exibição do recurso. Um nome de coluna de carimbo de data/hora será necessário se sua exibição de recursos incluir recursos de séries temporais.
Consulte a Referência da API do repositório de recursos para obter detalhes completos da API Python.
Criação de uma exibição de recurso gerenciada pelo Snowflake¶
Uma exibição de recurso gerenciada pelo Snowflake usa uma tabela dinâmica como tabela de recurso. Os recursos são extraídos dos dados de origem de acordo com uma cronograma especificado por você, manipulando novos dados de forma eficiente e incremental. A ilustração abaixo mostra o fluxo de dados desde sua origem, por meio de transformações de recurso, até uma tabela de recurso.
Para criar uma exibição de recurso gerenciada pelo Snowflake, use um código como o seguinte bloco Python, onde entity
é a entidade à qual os recursos estão associados e my_df
é o Snowpark DataFrame que contém sua lógica de transformação de recurso com base em seus dados de origem.
Definir o parâmetro refresh_freq
designa a exibição do recurso como gerenciada pelo Snowflake. O valor pode ser um delta de tempo (valor mínimo 1 minute
) ou pode ser uma expressão cron
com fuso horário (por exemplo * * * * * America/Los_Angeles
).
from snowflake.ml.feature_store import FeatureView
managed_fv = FeatureView(
name="MY_MANAGED_FV",
entities=[entity],
feature_df=my_df, # Snowpark DataFrame containing feature transformations
timestamp_col="ts", # optional timestamp column name in the dataframe
refresh_freq="5 minutes", # how often feature data refreshes
desc="my managed feature view" # optional description
)
É possível escrever transformações de recurso usando o Snowpark Python ou em SQL. A Snowpark Python API fornece funções utilitárias para definir tipos de recursos comuns, como agregações em janelas. Consulte Padrões comuns de recurso e consulta para exemplos de uso dessas funções.
Para se qualificar para a atualização incremental, cada tabela de origem deve ter o rastreamento de alterações habilitado. Se o rastreamento de alterações ainda não estiver habilitado em uma tabela de origem, o Snowflake tentará habilitá-lo automaticamente ao criar a tabela dinâmica da exibição de recurso. Isso requer OWNERSHIP da tabela. Se você não for o proprietário da tabela, peça ao proprietário para habilitar o rastreamento de alterações ou crie a exibição de recurso com refresh_mode='FULL'
, que lê completamente a tabela de origem para cada atualização.
Criação de uma exibição de recurso externo¶
Os recursos gerados fora do Snowflake Feature Store podem ser registrados configurando o parâmetro refresh_freq
como None
ao criá-los. Nessa situação, é necessário criar e manter a tabela de recurso. O recurso DataFrame é baseado na tabela de recurso, não na fonte de dados bruta, e geralmente contém uma projeção simples dessa tabela, sem transformações.
Nota
Você pode executar transformações de recurso no recurso DataFrame; esses cálculos são realizados conforme necessário quando você recuperar dados da exibição de recurso. No entanto, as exibições de recurso externo são destinadas principalmente para uso com ferramentas como o dbt, que você já usa para executar transformações de recurso. Geralmente, você deve usar exibições de recurso gerenciadas pelo Snowflake se quiser que o Snowflake execute a transformação de recurso.
A ilustração abaixo mostra o fluxo de dados desde sua origem, por meio da transformação de recurso por uma ferramenta externa (aqui dbt), até uma tabela de recurso.
As exibições de recurso externo são implementadas como exibições em sua tabela de recurso, portanto, não geram custos adicionais de armazenamento.
O código abaixo mostra como criar uma exibição de recurso externo.
external_fv = FeatureView(
name="MY_EXTERNAL_FV",
entities=[entity],
feature_df=my_df, # Snowpark DataFrame referencing the feature table
timestamp_col="ts", # optional timestamp column name in the dataframe
refresh_freq=None, # None means the feature view is external
desc="my external feature view" # optional description
)
Como tornar as exibições de recurso mais detectáveis¶
Adicionar descrições por recurso para FeatureView
facilita a localização de recursos usando a Universal Search do Snowsight. O exemplo a seguir usa um método attach_feature_desc
de exibição de recurso para fornecer uma breve descrição de cada recurso incluso em um dicionário Python:
external_fv = external_fv.attach_feature_desc(
{
"SENDERID": "Sender account ID for the transaction",
"RECEIVERID": "Receiver account ID for the transaction",
"IBAN": "International Bank Identifier for the receiver bank",
"AMOUNT": "Amount of the transaction"
}
)
Ambos os tipos de exibições de recurso podem ser enriquecidos com descrições de recurso.
Registro de exibições de recurso¶
Depois que uma exibição de recurso for completamente definida, é possível registrá-la no repositório de recurso usando o método register_feature_view
do repositório de recurso, com um nome e uma versão personalizados. A manutenção incremental (para tipos de consulta compatíveis) e a atualização automática ocorrem com base na frequência de atualização especificada.
Quando a consulta fornecida não puder ser mantida por meio de manutenção incremental usando uma tabela dinâmica, a tabela será totalmente atualizada a partir da consulta na frequência especificada. Isso pode levar a um maior atraso na atualização de recursos e a maiores custos de manutenção. Você pode alterar a lógica da consulta, dividindo-a em várias consultas menores que oferecem suporte à manutenção incremental ou provisionar um warehouse virtual maior para manutenção dinâmica de tabelas. Consulte Limitações gerais para obter as informações mais recentes sobre limitações de tabelas dinâmicas.
registered_fv: FeatureView = fs.register_feature_view(
feature_view=managed_fv, # feature view created above, could also use external_fv
version="1",
block=True, # whether function call blocks until initial data is available
overwrite=False, # whether to replace existing feature view with same name/version
)
Uma definição de pipeline de exibição de recursos é imutável após ser registrada, fornecendo computação de recursos consistente enquanto a visualização de recursos existir.
Recuperação de exibições de recurso¶
Depois que uma exibição de recurso for registrada no repositório de recurso, é possível recuperá-la se necessário usando o método get_feature_view
do repositório de recursos:
retrieved_fv: FeatureView = fs.get_feature_view(
name="MY_MANAGED_FV",
version="1"
)
Descoberta de exibições de recurso¶
Você pode listar todas as exibições de recursos registradas no repositório de recursos, filtrando opcionalmente por nome da entidade ou nome da exibição de recursos, usando o método list_feature_views
. As informações sobre os recursos correspondentes são retornadas como um Snowpark DataFrame. O código a seguir mostra um exemplo de obtenção de uma lista de exibições de recurso; fs
é uma referência ao repositório de recursos.
fs.list_feature_views(
entity_name="<entity_name>", # optional
feature_view_name="<feature_view_name>", # optional
).show()
Os recursos também podem ser descobertos usando a UI do Snowsight Feature Store ou Universal Search.
Atualização das exibições de recurso¶
É possível atualizar algumas propriedades de uma exibição de recurso registrada no repositório de recursos usando o método update_feature_view
do repositório de recursos. As propriedades atualizáveis são:
Frequência de atualização da exibição de recurso
Warehouse onde o recurso transforma a execução
Descrição da exibição do recurso
As definições de recursos e colunas não podem ser modificadas. Para alterar os recursos em um repositório de recurso, crie uma nova versão da exibição de recurso.
When you call update_feature_view
, specify the feature view version to be updated by providing its name and
version. The additional parameters specify the properties to be updated; you can specify just the ones you want to
change. The following code shows an example of changing feature view properties; :code:fs
is a reference to the
feature store.
fs.update_feature_view(
name="<name>",
version="<version>",
refresh_freq="<new_fresh_freq>", # optional
warehouse="<new_warehouse>", # optional
desc="<new_description>", # optional
)
Exclusão de exibições de recurso¶
You can delete a feature view from the feature store with the feature store’s delete_feature_view
method. The
following code shows an example of deleting a feature view; :code:fs
is a reference to the feature store.
fs.delete_feature_view(
feature_view="<name>",
version="<version>",
)
Aviso
Excluir uma versão de exibição de recurso interrompe todos os pipelines que a utilizam. Certifique-se de que a versão de exibição de recurso não esteja em uso antes de excluí-la.
Considerações sobre custo¶
As visualizações de recurso gerenciadas pelo Snowflake usam tabelas dinâmicas Snowflake. Consulte Sobre o monitoramento das tabelas dinâmicas para obter informações sobre monitoramento de tabelas dinâmicas e Compreensão do custo de tabelas dinâmicas para obter informações sobre os custos de tabelas dinâmicas. As exibições de recurso externo usam exibições que não geram custos adicionais de armazenamento.
Limitações conhecidas¶
O número máximo de exibições de recurso gerenciadas pelo Snowflake e as consultas de transformação de recurso em exibições de recurso estão sujeitas às limitações de tabela dinâmica.
Nem todas as consultas de transformação de recursos são suportadas pela atualização incremental dinâmica. Veja as limitações.
Os nomes das exibições de recursos são identificadores SQL e sujeitos a requisitos do identificador Snowflake.
As versões de exibição de recursos são sequências de caracteres e têm um comprimento máximo de 128 caracteres. Alguns caracteres não são permitidos e produzirão uma mensagem de erro.