Snowpipe で STALLED_COMPILATION_ERROR となった時に確認したこと
はじめに
Snowpipe 構成時にSTALLED_COMPILATION_ERRORに遭遇したので、確認した内容を本記事でまとめてみます。
結論
UI 上からは直接的な原因の特定は難しいですが、SYSTEM$PIPE_STATUSを実行するとエラーメッセージが表示される可能性があります。特にSTALLED_COMPILATION_ERRORについては、パイプ作成ロールが、パイプ作成に必要な各種権限を有していない可能性があるため、権限周りを再度確認すると良い考えです。
試してみる
前提条件
以下の環境で検証しています。
- クラウドリージョン:Azure Japaneast
- Snowpipe:Microsoft Azure BLOBストレージ用 の Snowpipe
事前準備
Azure Blob ストレージを使用するパイプを構成します。こちらの手順の詳細は以下をご参照ください。
ここでは、以下のコマンドで簡単に ACCOUNTADMIN でパイプ以外の必要なオブジェクトを作成しました。
USE ROLE ACCOUNTADMIN;
-- ストレージ統合
CREATE STORAGE INTEGRATION my_azure_storage_int
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = 'AZURE'
ENABLED = TRUE
AZURE_TENANT_ID = '<テナントID>'
STORAGE_ALLOWED_LOCATIONS = ('azure://<ストレージアカウント>.blob.core.windows.net/<コンテナ>/');
DESC STORAGE INTEGRATION my_azure_storage_int;
-- サンプルテーブル・パイプ作成用のデータベース
CREATE DATABASE test_db;
-- 外部ステージ
CREATE STAGE my_azure_stage
STORAGE_INTEGRATION = my_azure_storage_int
URL = 'azure://<ストレージアカウント>.blob.core.windows.net/<コンテナ>/';
--ファイルフォーマット
CREATE OR REPLACE FILE FORMAT my_csv_format
TYPE = CSV
FIELD_DELIMITER = ','
PARSE_HEADER = TRUE
EMPTY_FIELD_AS_NULL = true
COMPRESSION = AUTO;
-- 事前にサンプルデータをストレージに配置し、スキーマ検出機能によりテーブルを定義
CREATE OR REPLACE TABLE mytable
USING TEMPLATE (
SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*))
FROM TABLE(
INFER_SCHEMA(
LOCATION=>'@my_azure_stage/',
FILE_FORMAT=>'my_csv_format',
IGNORE_CASE => True
)
)
);
-- ロードできることを確認
COPY INTO mytable
FROM @my_azure_stage
FILE_FORMAT=(FORMAT_NAME = 'my_csv_format')
MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE;
--TRUNCATE TABLE MYTABLE;
/*==========
Snowpipe の設定
==========*/
--通知統合を作成
USE ROLE ACCOUNTADMIN;
CREATE NOTIFICATION INTEGRATION my_pipe_queue_int
ENABLED = true
TYPE = QUEUE
NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE
AZURE_STORAGE_QUEUE_PRIMARY_URI = 'https://<ストレージアカウント>.queue.core.windows.net/<キュー>'
AZURE_TENANT_ID = '<テナントID>';
DESC NOTIFICATION INTEGRATION my_pipe_queue_int;
パイプ管理用のロールを作成
パイプ作成には、統合オブジェクトも関わるのでデフォルトでは ACCOUNTADMIN の権限も必要です。このままでは権限が強すぎるので、開発者ロールなど、パイプ作成の権限を別途カスタムロールに持たせることは一般的と思います。
ここでは、以下の内容でパイプ管理者ロールとして作成しました。
-- ロールを作成
USE ROLE SECURITYADMIN;
CREATE ROLE pipe_admin;
GRANT ROLE pipe_admin TO ROLE SYSADMIN;
パイプ管理者ロールを作成後、パイプ作成に必要な権限を付与します。最低限必要な権限は以下の通りです。
GRANT USAGE ON DATABASE test_db TO ROLE pipe_admin;
-- パイプ作成先・サンプルテーブル作成先のスキーマ
GRANT USAGE ON SCHEMA test_db.public TO ROLE pipe_admin;
GRANT CREATE PIPE ON SCHEMA test_db.public TO ROLE pipe_admin;
GRANT USAGE ON INTEGRATION PIPE_QUEUE_INT TO ROLE pipe_admin;
GRANT USAGE ON STAGE test_db.public.my_azure_stage TO ROLE pipe_admin;
GRANT USAGE ON FILE FORMAT test_db.public.my_csv_format TO ROLE pipe_admin;
GRANT SELECT,INSERT ON TABLE test_db.public.mytable TO ROLE pipe_admin;
パイプを作成しロード
この状態でパイプを作成できます。
USE ROLE pipe_admin;
CREATE PIPE mypipe
AUTO_INGEST = true
INTEGRATION = 'PIPE_QUEUE_INT'
AS
COPY INTO test_db.public.mytable
FROM @test_db.public.my_azure_stage/
FILE_FORMAT=(FORMAT_NAME = 'my_csv_format')
MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE;
問題なければ UI だと下図のように表示されます。

ファイルが配置されるとロードされます。

権限が足りない場合
ここで例として、一部権限が足りない場合の動作を見てみます。
- ファイルフォーマットの使用権限がない場合
-- ファイルフォーマットの使用権限を削除
USE ROLE SECURITYADMIN;
REVOKE USAGE ON FILE FORMAT test_db.public.my_csv_format FROM ROLE pipe_admin;
この時点では、パイプステータス上は問題ないように見えます。(コマンドでも同様)

新しいファイルがストレージに配置されても、ロード処理そのものが行われません。
このタイミングでステータスも更新され、ここではSTALLED_COMPILATION_ERRORとなりました。

UI 上は具体的なエラー原因がわかりづらいのですが、SYSTEM$PIPE_STATUS を実行するとエラーメッセージが表示される場合があります。
SELECT SYSTEM$PIPE_STATUS('mypipe');
出力のerrorからファイルフォーマットへの権限がないことがわかります。
{
"executionState":"STALLED_COMPILATION_ERROR",
"pendingFileCount":0,
"error":"SQL compilation error:\nFile format 'MY_CSV_FORMAT' does not exist or not authorized.",
"lastIngestedTimestamp":"2025-11-29T02:29:27.241Z","lastIngestedFilePath":"sample_data_20240412.csv",
"notificationChannelName":"https://<ストレージアカウント>.queue.core.windows.net/<キュー>",
"numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2025-11-29T02:44:31.675Z",
"lastForwardedMessageTimestamp":"2025-11-29T02:44:32.284Z",
"lastPulledFromChannelTimestamp":"2025-11-29T02:46:51.666Z",
"lastForwardedFilePath":"<ストレージアカウント>.blob.core.windows.net/<コンテナ>/sample_data_20240413.csv",
"pendingHistoryRefreshJobsCount":0
}
テーブルの参照権限がない場合
参考までにテーブルに対する SELECT 権限がない場合は、UI 上で下図のように表示されます。

さいごに
Snowpipe 構成時のSTALLED_COMPILATION_ERRORの原因調査を試してみました。SYSTEM$PIPE_STATUS でエラーメッセージが表示されることがあります。
本記事の内容が何かの参考になれば幸いです。







