Gestion des balises avec Python¶
Vous pouvez utiliser Python pour gérer les balises dans Snowflake. Une balise est un objet de niveau schéma qui peut être affecté à un autre objet Snowflake. Vous associez une balise à une valeur de chaîne arbitraire lors de l’attribution de la balise, et Snowflake stocke la balise et sa valeur de chaîne sous forme de paire clé-valeur. Après avoir défini et attribué des balises, vous pouvez les interroger pour surveiller l’utilisation des objets et faciliter les opérations de gouvernance des données, telles que l’audit et la création de rapports.
Pour plus d’informations sur les balises, consultez Introduction au balisage des objets.
Le Snowflake Python APIs représente des balises avec les types suivants :
Tag: Représente un modèle d’objet de balise avec des propriétés telles que son nom, la base de données et le schéma dans lequel il est stocké, et la date de sa création.TagValue: Représente la valeur d’une balise.TagResource: Représente une référence à un objet de balise que vous pouvez utiliser pour récupérer des informations sur l’objet de balise et effectuer des opérations sur l’objet de balise, telles que renommer la balise et supprimer la balise.
Conditions préalables¶
Les exemples de cette rubrique supposent que vous ayez ajouté le code nécessaire pour vous connecter à Snowflake et créer un objet Root à partir duquel utiliser les Snowflake Python APIs.
Par exemple, le code suivant utilise les paramètres de connexion définis dans un fichier de configuration pour créer une connexion à Snowflake.
from snowflake.core import Root
from snowflake.snowpark import Session
session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
En utilisant l’objet Session obtenu, le code crée un objet Root pour utiliser les types et les méthodes de l’API. Pour plus d’informations, voir Connexion à Snowflake avec Snowflake Python APIs.
Créer des balises et les gérer pour une table¶
L’exemple de code suivant crée des balises nommées environment_tag et custom_tag, les attribue à une table nommée my_tagged_table, et extrait les attributions de balises pour la table. Ensuite, il désactive la balise environment_tag de la table et récupère à nouveau les attributions de balises.
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')}
Gérer les balises d’un schéma et d’une table avec héritage¶
L’exemple de code suivant attribue une balise existante nommée environment_tag à un schéma nommé my_schema et extrait les attributions de balises d’une table nommée another_tagged_table dans le schéma. Ensuite, il extrait les attributions de balises pour la table avec l’héritage (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')}