Verwalten von Tags mit Python¶
Sie können Python verwenden, um Tags in Snowflake zu verwalten. Ein Tag ist ein Objekt auf Schemaebene, das einem anderen Snowflake-Objekt zugewiesen werden kann. Sie verknüpfen ein Tag mit einem beliebigen Zeichenfolgenwert, wenn Sie das Tag zuweisen. Snowflake speichert das Tag und seinen Zeichenfolgenwert als Schlüssel-Wert-Paar. Nach dem Definieren und Zuweisen von Tags können Sie diese abfragen, um die Nutzung von Objekten zu überwachen und Data Governance-Operationen wie Auditing und Reporting zu vereinfachen.
Weitere Informationen zu Tags finden Sie unter Einführung in das Objekt-Tagging.
Snowflake Python APIs stellt Tags mit den folgenden Typen dar:
Tag: Repräsentiert ein Tag-Objektmodell mit Eigenschaften wie seinem Namen, der Datenbank und dem Schema, in dem es gespeichert ist, und wann es erstellt wurde.TagValue: Stellt den Wert eines Tags dar.TagResource: Stellt eine Referenz auf ein Tag-Objekt dar, das Sie verwenden können, um Informationen über das Tag-Objekt abzurufen und Operationen am Tag-Objekt durchzuführen, z. B. Umbenennen des Tags und Löschen des Tags.
Voraussetzungen¶
Die Beispiele in diesem Thema gehen davon aus, dass Sie Code hinzugefügt haben, um eine Verbindung zu Snowflake herzustellen und ein Root-Objekt zu erstellen, von dem aus Sie die Snowflake Python APIs verwenden können.
Beispielsweise verwendet der folgende Code Verbindungsparameter, die in einer Konfigurationsdatei definiert sind, um eine Verbindung zu Snowflake zu erstellen:
from snowflake.core import Root
from snowflake.snowpark import Session
session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
Unter Verwendung des resultierenden Session-Objekts erstellt der Code ein Root-Objekt, das die Typen und Methoden der API verwendet. Weitere Informationen dazu finden Sie unter Verbinden mit Snowflake mit dem Snowflake Python APIs.
Erstellen und Verwalten von Tags für eine Tabelle¶
Das folgende Codebeispiel erstellt Tags mit den Namen environment_tag und custom_tag, weist sie einer Tabelle namens my_tagged_table zu und ruft die Tag-Zuweisungen für die Tabelle ab. Dann wird das Tag environment_tag aus der Tabelle aufgehoben und die Tag-Zuweisungen erneut abgerufen.
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')}
Verwalten von Tags für ein Schema und eine Tabelle mit Vererbung¶
Das folgende Codebeispiel weist ein vorhandenes Tag mit dem Namen environment_tag einem Schema namens my_schema zu und ruft die Tag-Zuweisungen für eine Tabelle namens another_tagged_table im Schema ab. Dann werden die Tag-Zuweisungen für die Tabelle mit Vererbung (with_lineage=True) abgerufen.
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')}