Claude-skill-registry dbt-projects-snowflake-setup
dbt Projects on Snowflake Setup
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/dbt-projects-snowflake-setup" ~/.claude/skills/majiayu000-claude-skill-registry-dbt-projects-snowflake-setup && rm -rf "$T"
skills/data/dbt-projects-snowflake-setup/SKILL.mddbt Projects on Snowflake Setup
Complete step-by-step guide for setting up dbt Projects on Snowflake from beginning to end.
When to Use This Skill
Activate this skill when users ask about:
- Setting up dbt Projects on Snowflake for the first time
- Configuring external access integrations for dbt packages
- Setting up Git API integrations (GitHub, GitLab, Azure DevOps)
- Creating workspaces in Snowsight
- Configuring event table monitoring for dbt Projects
- Scheduling automated dbt runs with Snowflake Tasks
- Troubleshooting dbt Projects setup issues
Prerequisites
1. Snowflake Account
- Account with ACCOUNTADMIN permissions for initial setup
- Personal database enabled (default for new accounts)
2. Git Repository
- GitHub, GitLab, or Azure DevOps repository
- Personal Access Token (PAT) for authentication
Setup Steps
Step 1: Enable Personal Database
ALTER ACCOUNT SET ENABLE_PERSONAL_DATABASE = TRUE;
Step 2: Create External Access Integration
For
dbt deps to work, allow external access to dbt packages:
-- Create NETWORK RULE CREATE OR REPLACE NETWORK RULE dbt_network_rule MODE = EGRESS TYPE = HOST_PORT VALUE_LIST = ( 'hub.getdbt.com', 'codeload.github.com' ); -- Create EXTERNAL ACCESS INTEGRATION CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION dbt_ext_access ALLOWED_NETWORK_RULES = (dbt_network_rule) ENABLED = TRUE;
Purpose: Allows dbt to download packages from hub.getdbt.com and GitHub during
dbt deps
execution.
Step 3: Create Git API Integration
Choose the appropriate integration for your Git provider:
GitHub
CREATE OR REPLACE API INTEGRATION git_api_integration API_PROVIDER = git_https_api API_ALLOWED_PREFIXES = ( 'https://github.com/', 'https://github.com/organization/' );
GitLab
CREATE OR REPLACE API INTEGRATION git_api_integration API_PROVIDER = git_https_api API_ALLOWED_PREFIXES = ( 'https://gitlab.com/' );
Azure DevOps
CREATE OR REPLACE API INTEGRATION git_api_integration API_PROVIDER = git_https_api API_ALLOWED_PREFIXES = ( 'https://dev.azure.com/' );
Purpose: Allows Snowflake to connect to your Git repository for workspace creation and project deployment.
Step 4: Create Workspace in Snowsight
- Navigate to Projects → My Workspace
- Click My Workspace → Create Workspace → From Git repository
- Enter:
- Repository URL
- API integration name (
)git_api_integration - Authentication (PAT or OAuth)
Note: Workspace creation is only available through the Snowsight UI. The Snowflake CLI does not have commands for creating workspaces.
Step 5: Configure profiles.yml
In your workspace, configure
profiles.yml:
my_dbt_project: target: dev outputs: dev: type: snowflake account: "" # Uses current account context user: "" # Uses current user context warehouse: MY_WAREHOUSE database: MY_DATABASE schema: MY_SCHEMA role: MY_ROLE
Important Notes:
- Leave
andaccount
empty - Snowflake provides these automaticallyuser - Specify your warehouse, database, schema, and role
- For multiple environments, add additional outputs (staging, prod)
Step 6: Deploy as DBT PROJECT Object
UI Method:
- Use the Deploy button in workspace
CLI Method:
snow dbt deploy my_project --source .
Verify Deployment:
SHOW DBT PROJECTS IN DATABASE MY_DATABASE;
Event Table Monitoring Configuration (Optional but Recommended)
Monitor dbt Projects execution using event tables that capture telemetry data (logs, traces, metrics) via the OpenTelemetry data model.
Critical Pattern: Database-Level Configuration
Always set event tables at the DATABASE level (not schema, not account-wide):
-- Step 1: Create event table (can be in different database) CREATE EVENT TABLE IF NOT EXISTS MY_LOGGING_DATABASE.MY_LOGGING_SCHEMA.EVENT_LOG; -- Step 2: Set event table where dbt Projects are deployed at DATABASE level ALTER DATABASE MY_DBT_PROJECT_DATABASE SET EVENT_TABLE = MY_LOGGING_DATABASE.MY_LOGGING_SCHEMA.EVENT_LOG; -- Step 3: Configure logging levels for the schema where dbt Project is deployed ALTER SCHEMA MY_DBT_PROJECT_DATABASE.MY_DBT_PROJECT_SCHEMA SET LOG_LEVEL = 'INFO'; ALTER SCHEMA MY_DBT_PROJECT_DATABASE.MY_DBT_PROJECT_SCHEMA SET TRACE_LEVEL = 'ALWAYS'; ALTER SCHEMA MY_DBT_PROJECT_DATABASE.MY_DBT_PROJECT_SCHEMA SET METRIC_LEVEL = 'ALL';
Why DATABASE Level?
✅ DO:
- Set at DATABASE level for project-level isolation
- Captures all dbt Project executions in that database
- Avoids account-wide noise
- Provides clear project boundaries
❌ DON'T:
- Set at account level (too much noise from all databases)
- Set at schema level (misses cross-schema operations)
Verify Event Capture
After configuration, verify events are being captured:
-- Check recent events SELECT TIMESTAMP, RESOURCE_ATTRIBUTES['snow.executable.name']::VARCHAR AS project_name, RECORD_TYPE, RECORD['severity_text']::VARCHAR AS severity, VALUE::VARCHAR AS message FROM MY_LOGGING_DATABASE.MY_LOGGING_SCHEMA.EVENT_LOG WHERE RESOURCE_ATTRIBUTES['snow.executable.type']::VARCHAR = 'DBT_PROJECT' AND TIMESTAMP >= DATEADD(hour, -1, CURRENT_TIMESTAMP()) ORDER BY TIMESTAMP DESC LIMIT 10;
For complete monitoring guide, see the
skill for:dbt-projects-on-snowflake
- Ready-to-use monitoring SQL scripts
- Best practices for event table management
- Performance metrics queries
- Alerting strategies
- Troubleshooting guide
Scheduling Automated Runs (Optional)
Create a Snowflake task to run dbt on a schedule:
CREATE OR REPLACE TASK my_dbt_daily_task WAREHOUSE = 'MY_WAREHOUSE' SCHEDULE = 'USING CRON 0 6 * * * UTC' -- Daily at 6 AM UTC AS EXECUTE DBT PROJECT MY_DATABASE.MY_SCHEMA.MY_DBT_PROJECT args='build'; -- Enable the task ALTER TASK my_dbt_daily_task RESUME;
Customization Options
| Parameter | Purpose | Example |
|---|---|---|
| Task name | Identifies the scheduled job | |
| Warehouse | Compute resources | |
| Schedule | CRON expression | (daily 6 AM) |
| Database/Schema/Project | Target dbt project | |
| Args | dbt command arguments | , |
Common Schedules
-- Hourly SCHEDULE = 'USING CRON 0 * * * * UTC' -- Daily at 2 AM SCHEDULE = 'USING CRON 0 2 * * * UTC' -- Every 15 minutes SCHEDULE = '15 MINUTE' -- Weekly on Monday at 8 AM SCHEDULE = 'USING CRON 0 8 * * 1 UTC'
Monitor Task Execution
-- View task history SELECT * FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY( SCHEDULED_TIME_RANGE_START => DATEADD('day', -7, CURRENT_TIMESTAMP()), TASK_NAME => 'MY_DBT_DAILY_TASK' )) ORDER BY SCHEDULED_TIME DESC;
Troubleshooting
SSH/Network Issues
Problem: Can't download dbt packages or connect to Git
Solutions:
-
Verify external access integration exists:
SHOW EXTERNAL ACCESS INTEGRATIONS; -
Check network rules include required hosts:
DESCRIBE EXTERNAL ACCESS INTEGRATION dbt_ext_access; -
Ensure required hosts are in VALUE_LIST:
(for dbt packages)hub.getdbt.com
(for GitHub packages)codeload.github.com
Authentication Failures
Problem: Git authentication fails in workspace creation
Solutions:
-
Verify PAT has correct scopes:
- GitHub:
scoperepo - GitLab:
scoperead_repository - Azure DevOps:
permissionCode (Read)
- GitHub:
-
Check API integration is created:
SHOW API INTEGRATIONS; -
Verify API allowed prefixes match your repository URL
Package Installation Issues
Problem:
dbt deps fails in workspace
Solutions:
-
Run
manually in workspace before deploymentdbt deps -
Ensure external access integration is enabled:
ALTER EXTERNAL ACCESS INTEGRATION dbt_ext_access SET ENABLED = TRUE; -
Check package versions are compatible with dbt version in Snowflake
Event Table Not Capturing Data
Problem: No events appearing in event table
Solutions:
-
Verify event table is set at DATABASE level:
SHOW PARAMETERS LIKE 'EVENT_TABLE' IN DATABASE MY_DATABASE; -
Check logging levels are set for schema:
SHOW PARAMETERS LIKE '%_LEVEL' IN SCHEMA MY_DATABASE.MY_SCHEMA; -
Ensure dbt Project has executed at least once after configuration
-
Query with correct filter:
WHERE RESOURCE_ATTRIBUTES['snow.executable.type']::VARCHAR = 'DBT_PROJECT'
Workspace Creation Fails
Problem: Can't create workspace from Git repository
Solutions:
-
Verify personal database is enabled:
SHOW PARAMETERS LIKE 'ENABLE_PERSONAL_DATABASE' IN ACCOUNT; -
Check you have required role (ACCOUNTADMIN or sufficient grants)
-
Ensure Git repository URL is correct and accessible
-
Verify Git API integration exists and has correct allowed prefixes:
SHOW API INTEGRATIONS; DESCRIBE API INTEGRATION git_api_integration; -
Check PAT/OAuth token has correct permissions for the repository
Best Practices
Security
✅ DO:
- Use key pair authentication for production deployments
- Rotate PATs regularly
- Use minimal scopes on PATs
- Set up separate integrations for dev/prod
- Use role-based access control
❌ DON'T:
- Share PATs between team members
- Use ACCOUNTADMIN for routine operations
- Grant excessive permissions to API integrations
- Hardcode credentials in profiles.yml
Organization
✅ DO:
- Use consistent naming conventions (e.g.,
){env}_dbt_project - Organize projects by database
- Document integration configurations
- Set up event tables from the start
- Use separate warehouses for dev/prod
❌ DON'T:
- Mix development and production in same database
- Skip event table configuration
- Use default warehouse for all environments
- Deploy without testing in workspace first
Monitoring
✅ DO:
- Configure event tables at database level
- Set appropriate log/trace/metric levels
- Query event tables regularly to verify capture
- Set up alerts for failures
- Archive old event data periodically
❌ DON'T:
- Set event tables at account level (too noisy)
- Ignore event table configuration
- Set all levels to DEBUG (storage bloat)
- Keep event data indefinitely
Quick Setup Checklist
- ✅ Enable personal database
- ✅ Create external access integration (for dbt deps)
- ✅ Create Git API integration
- ✅ Create workspace from Git repository
- ✅ Configure profiles.yml
- ✅ Test in workspace
- ✅ Deploy as DBT PROJECT object
- ✅ Configure event table (recommended)
- ✅ Verify deployment with
SHOW DBT PROJECTS - ✅ Test execution with
EXECUTE DBT PROJECT - ✅ Set up scheduled tasks (if needed)
- ✅ Configure monitoring queries
Related Skills
skill - Complete monitoring, execution, and management guidedbt-projects-on-snowflake
skill - dbt-core setup and profiles.yml configurationdbt-core
skill - Snowflake authentication and connection configurationsnowflake-connections
skill - Snowflake CLI commands and operationssnowflake-cli
Goal: Transform AI agents into experts at setting up dbt Projects on Snowflake from scratch with proper integrations, monitoring, and automation configured from day one.