Gerenciando tags com Python¶
É possível usar Python para gerenciar tags no Snowflake. Uma tag é um objeto em nível de esquema que pode ser atribuído a outro objeto Snowflake. Você associa uma tag a um valor de cadeia de caracteres arbitrário ao atribuir a tag, e o Snowflake armazena a tag e seu valor de cadeia de caracteres como um par chave-valor. Depois de definir e atribuir tags, você pode consultá-las para monitorar o uso em objetos e facilitar operações de governança de dados, como auditoria e geração de relatórios.
Para obter mais informações sobre tags, consulte Introdução à marcação de objetos.
O Snowflake Python APIs representa tags com os seguintes tipos:
Tag: representa um modelo de objeto de tag com propriedades como o nome, o banco de dados e o esquema em que está armazenado e quando foi criado.TagValue: representa o valor de uma tag.TagResource: representa uma referência a um objeto de tag que você pode usar para buscar informações sobre ele e executar operações nele, como renomear e descartar a tag.
Pré-requisitos¶
Os exemplos neste tópico pressupõem que você tenha adicionado código para se conectar ao Snowflake e criar um objeto Root a partir do qual usar o Snowflake Python APIs.
Por exemplo, o seguinte código usa parâmetros de conexão definidos em um arquivo de configuração para criar uma conexão com o Snowflake:
from snowflake.core import Root
from snowflake.snowpark import Session
session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
Usando o objeto Session resultante, o código cria um objeto Root para usar os tipos e métodos de API. Para obter mais informações, consulte Conexão ao Snowflake com o Snowflake Python APIs.
Criar e gerenciar tags para uma tabela¶
O exemplo de código a seguir cria tags chamadas environment_tag e custom_tag, as atribui a uma tabela chamada my_tagged_table e busca as atribuições de tag para a tabela. Em seguida, remove a tag environment_tag da tabela e busca as atribuições de tag novamente.
from snowflake.core.tag import Tag, TagValue
table = root.databases["my_database"].schemas["my_schema"].tables["my_tagged_table"]
tags = root.databases["tag_database"].schemas["tag_schema"].tags
# Create tags
environment_tag = Tag(
name="environment_tag",
allowed_values=["prod", "dev", "staging"],
comment="Tag to classify environment",
)
custom_tag = Tag(
name="custom_tag",
)
environment_tag_resource = tags.create(environment_tag, mode="ifNotExists")
custom_tag_resource = tags.create(custom_tag, mode="ifNotExists")
# Set tags on a table
table.set_tags({environment_tag_resource: TagValue(value="prod"), custom_tag_resource: TagValue(value="custom value")})
# Fetch tag assignments for the table
fetched_tags = table.get_tags()
print(f"Tags on table: {fetched_tags}")
# Tags on table: {<TagResource: 'TAG_DATABASE.TAG_SCHEMA.CUSTOM_TAG'>: TagValue(value='custom value', level='TABLE'), <TagResource: 'TAG_DATABASE.TAG_SCHEMA.ENVIRONMENT_TAG'>: TagValue(value='prod', level='TABLE')}
# Unset one of the tags from the table
table.unset_tags({environment_tag_resource})
# Fetch tag assignments again
fetched_tags_after_unset = table.get_tags()
print(f"Tags after unset: {fetched_tags_after_unset}")
# Tags after unset: {<TagResource: 'TAG_DATABASE.TAG_SCHEMA.CUSTOM_TAG'>: TagValue(value='custom value', level='TABLE')}
Gerenciar tags para um esquema e uma tabela com herança¶
O exemplo de código a seguir atribui uma tag existente chamada environment_tag a um esquema chamado my_schema e busca as atribuições de tag para uma tabela chamada another_tagged_table no esquema. Em seguida, busca as atribuições de tag para a tabela com herança (with_lineage=True).
from snowflake.core.tag import TagValue
schema = root.databases["my_database"].schemas["my_schema"]
table = schema.tables["another_tagged_table"]
environment_tag = root.databases["tag_database"].schemas["tag_schema"].tags["environment_tag"]
# Set tag on a schema
schema.set_tags({environment_tag: TagValue(value="prod")})
# Fetch tag assignments for the table
fetched_tags = table.get_tags()
print(f"Tags on table: {fetched_tags}")
# Tags on table: {}
# Fetch tag assignments for the table with inheritance
fetched_tags_with_lineage = table.get_tags(with_lineage=True)
print(f"Tags including inheritance: {fetched_tags_with_lineage}")
# Tags including inheritance: {<TagResource: 'TAG_DATABASE.TAG_SCHEMA.ENVIRONMENT_TAG'>: TagValue(value='prod', level='SCHEMA')}