Snowflake

SnowflakeのGit統合でSQLスクリプトとNotebookをバージョン管理する方法

2026-03-26
更新: 2026-03-27
NicheeLab編集部

Snowflake Git Integrationは、GitHub・GitLab等のGitリポジトリを Snowflakeのデータベースオブジェクトとして登録し、リポジトリ内のSQLスクリプト・Pythonファイル・ 設定ファイルをSnowflake内から直接参照・実行できる機能です。 インフラのコード化(IaC)やCI/CDパイプラインの統合に活用でき、 Snowflake Notebookのバージョン管理にも利用できます。

Git統合のセットアップフロー

Step 1: Secret(認証情報)の作成
  ↓
Step 2: API Integration(Git API接続)の作成
  ↓
Step 3: Git Repositoryオブジェクトの作成
  ↓
Step 4: FETCH でリモートと同期
  ↓
Step 5: ファイル参照・スクリプト実行

Step 1: 認証用Secretの作成

-- GitHubのPersonal Access Token (PAT) を格納
CREATE OR REPLACE SECRET git_pat_secret
  TYPE = PASSWORD
  USERNAME = 'github-username'
  PASSWORD = 'ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

-- パブリックリポジトリの場合はSecretは不要

Step 2: API Integrationの作成

-- GitHub用のAPI Integration
CREATE OR REPLACE API INTEGRATION github_api_integration
  API_PROVIDER = git_https_api
  API_ALLOWED_PREFIXES = ('https://github.com/my-org/')
  ALLOWED_AUTHENTICATION_SECRETS = (git_pat_secret)
  ENABLED = TRUE;

Step 3: Git Repositoryの作成

-- Git Repositoryオブジェクトの作成
CREATE OR REPLACE GIT REPOSITORY analytics_db.public.my_sql_repo
  API_INTEGRATION = github_api_integration
  GIT_CREDENTIALS = git_pat_secret
  ORIGIN = 'https://github.com/my-org/snowflake-sql-scripts.git';

-- パブリックリポジトリの場合(認証なし)
CREATE OR REPLACE GIT REPOSITORY analytics_db.public.public_repo
  API_INTEGRATION = github_api_integration
  ORIGIN = 'https://github.com/my-org/public-scripts.git';

Step 4: リモートリポジトリのフェッチ

-- リモートリポジトリの最新を取得
ALTER GIT REPOSITORY analytics_db.public.my_sql_repo FETCH;

-- ブランチ一覧を確認
SHOW GIT BRANCHES IN analytics_db.public.my_sql_repo;

-- タグ一覧を確認
SHOW GIT TAGS IN analytics_db.public.my_sql_repo;

ファイルの参照

-- mainブランチのファイル一覧
LIST @analytics_db.public.my_sql_repo/branches/main/;

-- 特定ディレクトリのファイル一覧
LIST @analytics_db.public.my_sql_repo/branches/main/sql/transforms/;

-- 特定タグのファイル一覧
LIST @analytics_db.public.my_sql_repo/tags/v1.2.0/;

-- ファイルの内容を読み取り
SELECT $1 AS content
FROM @analytics_db.public.my_sql_repo/branches/main/README.md
(FILE_FORMAT => 'util_db.formats.text_raw');

SQLスクリプトの実行

-- Git Repository内のSQLスクリプトを直接実行
EXECUTE IMMEDIATE FROM
  @analytics_db.public.my_sql_repo/branches/main/sql/create_tables.sql;

-- 特定タグ(バージョン)のスクリプトを実行
EXECUTE IMMEDIATE FROM
  @analytics_db.public.my_sql_repo/tags/v1.2.0/sql/migrations/001_add_columns.sql;

-- 変数を渡してスクリプトを実行
EXECUTE IMMEDIATE FROM
  @analytics_db.public.my_sql_repo/branches/main/sql/parameterized_query.sql
  USING (target_date => '2026-03-27', batch_size => 10000);

Git Repositoryのパス構造

パス形式参照先
@repo/branches/<branch>/ブランチの最新コミット@my_repo/branches/main/sql/
@repo/tags/<tag>/特定タグのコミット@my_repo/tags/v1.0.0/sql/
@repo/commits/<hash>/特定コミットハッシュ@my_repo/commits/abc123/sql/

Snowflake Notebookとの連携

Snowsight上のNotebookをGitリポジトリと連携させることで、 NotebookのバージョンがGitで管理されます。

  • Snowsight UIからNotebookにGitリポジトリを接続
  • ブランチ切り替え・コミット・プッシュをUI上で操作可能
  • 複数のデータサイエンティストが同一Notebookをブランチベースで共同編集
  • プルリクエストベースのレビューフローをGitHub/GitLab上で実施

CI/CDパイプラインパターン

-- TaskでFETCH → スクリプト実行を自動化
CREATE OR REPLACE TASK daily_deploy
  WAREHOUSE = ops_wh
  SCHEDULE = 'USING CRON 0 6 * * * UTC'
AS
  BEGIN
    ALTER GIT REPOSITORY my_sql_repo FETCH;
    EXECUTE IMMEDIATE FROM
      @my_sql_repo/branches/main/sql/daily_etl.sql;
  END;

ALTER TASK daily_deploy RESUME;

必要な権限

操作必要な権限
CREATE GIT REPOSITORYスキーマに対するCREATE GIT REPOSITORY権限
ALTER GIT REPOSITORY FETCHGit Repositoryに対するOWNERSHIPまたはMONITOR権限
EXECUTE IMMEDIATE FROM @repoGit Repositoryに対するREAD権限 + スクリプト内SQLの実行権限
LIST @repoGit Repositoryに対するREAD権限

ベストプラクティス

  • タグベースのデプロイメント:本番環境ではブランチではなくタグを参照し、特定バージョンのスクリプトを確実に実行する
  • 定期的なFETCHをTaskでスケジュール:手動FETCHの漏れを防ぐため、TaskでFETCHを定期実行する
  • API_ALLOWED_PREFIXESを制限:API IntegrationのAPI_ALLOWED_PREFIXESで許可するリポジトリの範囲を最小限にする
  • Secretのローテーション:Personal Access Tokenには有効期限を設定し、定期的にSecretを更新する

問題で確認

DevOps & Git

問題 1

GitHubのプライベートリポジトリをSnowflakeのGit Repositoryとして登録したい。CREATE GIT REPOSITORYの前に作成が必要なオブジェクトの組み合わせとして正しいものはどれか。

  1. Storage IntegrationとExternal Stage
  2. Secret(PAT格納)とAPI Integration(git_https_api)
  3. Network RuleとExternal Access Integration
  4. Security IntegrationとOAuthトークン

正解: B

プライベートGitリポジトリへの接続には、(1) Personal Access Tokenを格納するSecret(TYPE = PASSWORD)と、(2) API_PROVIDER = git_https_apiを指定したAPI Integrationの2つが必要です。CREATE GIT REPOSITORYでGIT_CREDENTIALSにSecretを、API_INTEGRATIONにAPI Integrationを指定します。Storage IntegrationはStage用、Network RuleはExternal Access Integration用であり、Git統合では使用しません。

よくある質問

SnowflakeのGit統合でサポートされているGitプロバイダーは何ですか?

GitHub、GitLab、Bitbucket、Azure DevOps ReposなどのHTTPS経由でアクセスできるGitリポジトリをサポートしています。SSHプロトコルはサポートされていないため、HTTPS URLを使用してリポジトリを登録する必要があります。プライベートリポジトリにはSecretオブジェクトでPersonal Access Token(PAT)を設定して認証します。

Git Repositoryに登録したリポジトリの内容はリアルタイムに同期されますか?

いいえ、自動同期ではありません。ALTER GIT REPOSITORY ... FETCH コマンドを手動で実行するか、Taskでスケジュール実行してリモートリポジトリの最新内容をフェッチする必要があります。フェッチ後、特定のブランチやタグのファイルにSQLクエリでアクセスできます。フェッチはServerless Creditで課金されます。

Git Repository内のファイルをCOPY INTOのソースとして使えますか?

直接的にCOPY INTOのソースとして使うことはできません。Git Repositoryはコードやスクリプトの管理用であり、大量データのロード用のStageとは異なります。ただし、Git Repository内のSQLスクリプトをEXECUTE IMMEDIATE FROM @git_repo/branches/main/scripts/load.sqlのように実行することで、間接的にデータパイプラインを駆動できます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.