Snowflake「Warehouse does not exist」エラーの原因と解決法

Snowflakeの「Warehouse does not exist or not authorized」エラーの原因と解決法を解説するアイキャッチ。スペルミス・権限・ロールの3観点から初心者向けに最短手順を整理した内容を示す主題 Snowflake
この記事をシェアする𝕏B!FacebookLINEPocket

はじめに:そのエラー、ウェアハウスが「無い」とは限りません

Snowsightでクエリを実行しようとしたら、いきなり 「Warehouse ‘XXX’ does not exist or not authorized.」 と赤いエラーが出てきて固まってしまった…そんな経験はありませんか?日本語にすると「ウェアハウスが存在しないか、権限がありません」という意味のエラーですが、実は 本当にウェアハウスが無いケースは少数派 で、ほとんどは「あるのに見えていない」状態なんです。

この記事では、SQL初心者の方でも迷わないように、このエラーの原因を3つに絞って解説します。

Snowsightのクエリ実行画面に「Warehouse 'XXX' does not exist or not authorized.」という赤いエラーメッセージが表示された状態を示すスクリーンショットで、ウェアハウス未指定や権限不足が原因となるSnowflake特有のエラー発生時の典型例

そもそも「ウェアハウス」って?

ウェアハウス (Virtual Warehouse) は、Snowflakeでクエリを動かすための「計算エンジン」です。データそのものはストレージに置かれていて、そのデータを処理するときに必要なCPUとメモリを提供してくれるのがウェアハウスだと考えてください。レストランで言えば、データは食材、ウェアハウスは料理人といったところでしょうか。

クエリを実行するときは必ず「どのウェアハウスを使うか」が決まっている必要があり、それが指定されていなかったり、指定したものに触れなかったりすると、冒頭のエラーが出るわけです。

原因1: ウェアハウス名のスペルミス・存在しない

もっとも単純で多いのが、単純な打ち間違いです。まずは本当に存在するかを確認しましょう。

-- アカウント内に存在するウェアハウス一覧を表示
SHOW WAREHOUSES;

このコマンドで一覧に出てこなければ、その名前のウェアハウスは存在しません。CREATE していないか、あるいは COMPUTE_WHCOMUPTE_WH のように打ち間違えているかもしれません。命名ルールが社内で決まっているなら、Snowflake命名規則ベストプラクティス|ウェアハウス・ユーザー・ロール も合わせて見直してみてください。

原因2: USAGE権限が無い

ウェアハウス自体は存在しても、いま使っているロールに USAGE権限 が無いと「見えない」扱いになり、同じエラーが返ってきます。Snowflakeはセキュリティのため、「権限が無いオブジェクトは存在しない」と回答するのです。

権限を確認するには、次のSQLを実行します。

-- 現在のロールが持つ権限を確認
SHOW GRANTS TO ROLE my_role;

-- ウェアハウスに紐づく権限を確認
SHOW GRANTS ON WAREHOUSE my_wh;

USAGEが無ければ、ACCOUNTADMINなど権限を付与できるロールから付け足します。

GRANT USAGE ON WAREHOUSE my_wh TO ROLE my_role;

テーブルが見えない場合の「Object does not exist or not authorized」も仕組みは同じです。詳しくは Object does not exist or not authorized エラーの正体 を参照してください。

原因3: ロールが切り替わっていない

USAGEが付いているのにまだエラーが出る…そんなときは、現在のセッションで 権限を持つロールに切り替わっていない 可能性が高いです。Snowsightの右上のロール表示が想定したものになっているか、SQLで確認しましょう。

SELECT CURRENT_ROLE(), CURRENT_WAREHOUSE();

-- 切り替え
USE ROLE my_role;
USE WAREHOUSE my_wh;

権限まわりが複雑になってきた場合は、Insufficient privileges to operate on の原因と解決手順 もチェックすると理解が深まります。

Snowsightワークシートで現在のロールとウェアハウスをCURRENT_ROLEおよびCURRENT_WAREHOUSE関数で確認し、USE ROLEとUSE WAREHOUSEで切り替えた結果を示すSQL実行画面のスクリーンショット

SnowsightのUIから直す手順

SQLが面倒なら、Snowsight右上の「Worksheet」コンテキストから次のように直せます。

  1. 右上の「Role」をクリックして、USAGE権限を持つロールを選択
  2. 続けて隣の「Warehouse」をクリックして、使いたいウェアハウスを選択
  3. 選択後にクエリを再実行

これだけでだいたいのケースは解消します。

つまずきがちな注意点

  • 引用符の罠: "my_wh" のようにダブルクォートで囲むと、大文字小文字がそのまま扱われます。作成時に小文字で作っていなければマッチしません。
  • セッションのデフォルト: ユーザーに DEFAULT_WAREHOUSE が設定されていない状態で接続すると、ウェアハウス未指定で同じエラーになります。ALTER USER ... SET DEFAULT_WAREHOUSE = ... で設定しておくと安心です。
  • サスペンド中でもOK: ウェアハウスが停止中(SUSPENDED)でもエラーにはなりません。クエリ実行時に自動で起動します。

まとめ

「Warehouse does not exist or not authorized」は、存在しない / USAGE権限が無い / ロールが違う の3パターンが原因のほとんどです。慌てずに SHOW WAREHOUSESSHOW GRANTS、そして CURRENT_ROLE() の3つを確認すれば、ほぼ確実に解決できます。ウェアハウスのコストが気になる方は、Snowflakeウェアハウス使用状況の可視化とコスト最適化入門 もあわせて読んでみてください。

参考リンク

関連記事

この記事をシェアする𝕏B!FacebookLINEPocket