André Lynum
08/13/2026, 10:32 AMMarvin
08/13/2026, 10:32 AMMarvin
08/13/2026, 10:34 AMfrom prefect import flow, task
from prefect.artifacts import create_table_artifact
from prefect_snowflake import SnowflakeConnector
import json
@task
def write_to_snowflake(rows, connector_block_name):
with SnowflakeConnector.load(connector_block_name) as conn:
conn.execute("""
CREATE TABLE IF NOT EXISTS prefect_artifacts_export (
artifact_key STRING,
artifact_type STRING,
artifact_data VARIANT
)
""")
conn.execute(
"""
INSERT INTO prefect_artifacts_export
(artifact_key, artifact_type, artifact_data)
VALUES (?, ?, ?)
""",
parameters=(
"sales-summary",
"table",
json.dumps(rows),
),
)
@flow
def my_flow():
rows = [
{"region": "NA", "revenue": 100},
{"region": "EU", "revenue": 200},
]
create_table_artifact(
key="sales-summary",
table=rows,
description="Sales summary"
)
write_to_snowflake(rows, "my-snowflake-connector")
Useful links
- Artifacts concept: Prefect artifacts
- Creating artifacts: How to create artifacts
- Artifacts REST API: Artifacts API
- Snowflake integration: prefect-snowflake
Short answer
- Possible? Yes
- Built-in? No
- Best practice? Treat artifacts as UI metadata, and write the same underlying data to Snowflake directly
If you want, I can give you:
1. a full Prefect 3 example using prefect-snowflake, or
2. an example that reads existing artifacts from Prefect and bulk-loads them into Snowflake.