外部テーブルのトラブルシューティング

このトピックでは、期待どおりに実行されない動的テーブルのトラブルシューティングの解決策について説明します。

動的テーブルの使用に関する制限や、必要な権限がない場合、一部の操作が制限されることがあります。詳細については、 動的テーブルの既知の制限 および 動的テーブルのアクセス制御 をご参照ください。

動的テーブルコストについては、 動的テーブルのコストを理解する をご参照ください。

ここに記載されていない問題が発生した場合は、 Snowflakeサポート までお問い合わせください。

動的テーブルリフレッシュのトラブルシューティング

問題

解決策

動的テーブルは増分リフレッシュではなくフルリフレッシュを使用しています。

動的テーブルの実際の リフレッシュモード は作成時に決定され、その後は不変です。明示的に指定されない場合、リフレッシュモードのデフォルトは AUTO です。これは、クエリの複雑さ、サポートされていない構成要素、演算子、関数などの様々な要因に基づいてリフレッシュモードを選択します。

Snowflakeのリリース間で一貫した動作を維持するには、すべての動的テーブルで明示的にリフレッシュモードを設定する必要があります。たとえば、動的テーブルを増分的にのみリフレッシュさせたい場合は、作成時にリフレッシュモードを明示的に INCREMENTAL に設定する必要があります。 増分リフレッシュの使用には、制限がある かもしれないことを念頭に置いてください。詳細については、 すべての実稼働動的テーブルのリフレッシュモードを設定します。 をご参照ください。

必要な権限 を持つロールを使用して、以下のいずれかの方法でリフレッシュモードを検証できます。

  • SQLの使用:SHOWDYNAMICTABLESステートメントを実行します。出力で、 text 列はユーザーが指定したリフレッシュモードを示し、 refresh_mode 列は実際のリフレッシュモードを示し、 refresh_mode_reason は実際のリフレッシュモードが選択された理由を示しています。

  • Snowsight の使用:ナビゲーションメニューで、 Monitoring » Dynamic Tables を選択し、動的テーブルを選択します。動的テーブルのリフレッシュモードは、 Table Details タブに表示できます。

動的テーブルの増分リフレッシュが遅いようです。

動的テーブルのリフレッシュパフォーマンスは、そのテーブルが扱うワークロードやデータに関する特定の仮定に依存します。

Refresh History を使用して、分散を表示したり、外れ値を検出します。

  1. Snowsight にサインインします。

  2. ナビゲーションで、 Monitoring » Dynamic Tables に移動します。

  3. 動的テーブルを選択し、 Refresh History タブを開きます。

  4. トラブルシューティングには、過去24時間の動的テーブルのリフレッシュ時間を使用します。

動的テーブルが空のリフレッシュを実行していますが、コストが表示されています。

動的テーブルが参照する上流オブジェクトの変更に関連する場合、正味の新しい行がゼロ(つまり、追加、リフレッシュ、削除された行がゼロ)のリフレッシュはウェアハウスリソースを消費します。

たとえば、関連する仮想ウェアハウスが中断され、ベースオブジェクトの変更が識別子で確認されない場合、中断された仮想ウェアハウスは再開されず、クレジットも消費されません。これは、 NO_DATA リフレッシュと呼ばれています。逆に、変更が識別された場合、更新を処理するために仮想ウェアハウスが自動的に再開され、その結果、動的テーブルに適用される行がゼロであってもウェアハウスのリソースが消費されます。

動的テーブルに変更を加えていないにもかかわらずコストが表示される場合は、ソーステーブルの変更が原因である可能性があります。 Snowsight の Refresh History タブを使用して、仮想ウェアハウスのクレジットが消費されたかどうかを確認できます。

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Monitoring » Dynamic Tables を選択します。

  3. 動的テーブルを選択し、 Refresh History タブを開きます。

  4. Warehouse used only チェックボックスをチェックして、ウェアハウスを使用してリフレッシュされたリフレッシュを表示します。

詳細については、 動的テーブルのコストを理解する をご参照ください。

動的テーブルがリフレッシュをスキップしました。

動的テーブルはスケジュールに従ってリフレッシュされます。スケジュールされたリフレッシュが開始されると、次のような状況でリフレッシュがスキップされることがあります。

  • リフレッシュされる動的テーブルの上流に別の動的テーブルがあり、上流のリフレッシュが失敗したかスキップされた場合。

  • 動的テーブルの以前のリフレッシュがまだ実行されている場合。

  • 動的テーブルのリフレッシュに目標遅延よりも長い時間がかかることが多い場合、Snowflakeはリフレッシュをスキップして将来のスキップ率を下げる可能性があります。

手動リフレッシュがスキップされることはありませんが、他のリフレッシュがスキップされる可能性があります。これを行うと、下流の動的テーブルがリフレッシュされなくなります。このため、Snowflakeでは、ターゲットラグに従ってリフレッシュすることが期待される下流の動的テーブルがある動的テーブルで、手動リフレッシュを頻繁に実行することは推奨していません。

動的テーブルのリフレッシュに失敗しました。

通常のSnowflakeクエリと同様に、動的テーブルのクエリ定義、入力データ(解析エラーなど)、または内部システムの問題が原因で、動的テーブルのリフレッシュに失敗することがあります。

リフレッシュに失敗した原因を特定するには、以下を実行してください:

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Monitoring » Dynamic Tables を選択します。

  3. 動的テーブルを選択し、 Table Details タブを開きます。

  4. Details の下にある Last Completed Refresh にカーソルを合わせます。リフレッシュに失敗したエラーコードとメッセージの詳細が表示されます。

upstream_failed エラーコードによってリフレッシュに失敗した場合は、上流の動的テーブルのいずれかに問題がある可能性があります。どの上流テーブルで障害が発生したかを特定するには:

  1. Snowsight ナビゲーションメニューで、 Monitoring » Dynamic Tables を選択し、動的テーブルを選択します。

  2. Graph ページを開き、動的テーブルのグラフ履歴を表示します。

  3. グラフから、赤く表示されている上流の動的テーブルを選択し、 Refresh History を確認します。

動的テーブルが再初期化されています。

動的テーブルが再初期化されるのは、以下のいずれかの原因が考えられます。

  • 動的テーブルの1つ以上の入力が置換されている場合。例えば、動的テーブルがビュー上で定義されていて、ビューを置き換えた場合、動的テーブルは再初期化する必要があります。

  • 入力のスキーマが変更され、動的テーブルが変更された列に依存している場合。

  • データアクセスポリシー は、動的テーブルの入力に対して追加、削除、変更されます。

  • クローンされた増分動的テーブル は、作成後の最初のリフレッシュ時に再初期化が必要になることがあります。

  • 増分リフレッシュで 複製された動的テーブル は、フェールオーバー後に再初期化してから増分リフレッシュを再開します。

初期化に関する一般的な情報については、 動的テーブル初期化の理解 をご参照ください。

動的テーブル作成のトラブルシューティング

問題

解決策

動的テーブルの作成に時間がかかっています。

CREATE DYNAMIC TABLEステートメントを使用して動的テーブルを作成すると、初期リフレッシュははスケジュールされた時間(ON_SCHEDULE)に実行されるか、作成時(ON_CREATE)に同期的に実行されます。初期データ入力、つまり 初期化 は、この初期リフレッシュがいつ発生するかによって決まります。例えば、同期的な初期化は、参照されている上流の動的テーブルのリフレッシュをトリガーし、初期化の総所要時間に処理時間が追加される可能性があります。

スキャンされるデータの量に応じて、初期化に時間がかかる場合があります。進行状況を表示するには、以下を実行します。

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Monitoring » Query History を選択します。

  3. Filters ドロップダウンで、 SQL Text フィルターに CREATE DYNAMIC TABLE と入力し、 Warehouse フィルターにウェアハウス名を入力します。

  4. SQL text で動的テーブルを含むクエリを選択し、 Query DetailsQuery Profile タブを使用して進行状況を追跡します。

初期化に関する一般的な情報については、 動的テーブル初期化の理解 をご参照ください。

動的テーブルをデバッグする

問題

解決策

動的テーブルのメタデータが表示されません。

動的テーブルのメタデータとInformation Schemaを表示するには、その動的テーブルの MONITOR 権限を持つロールを使用する必要があります。詳細については、 動的テーブルのメタデータを表示する権限 をご参照ください。

動的テーブルが中断しています。

動的テーブルが中断する理由にはいくつかあります。

  • ALTERDYNAMICTABLE ... SUSPEND コマンドを使って直接中断された。

  • 中断された動的テーブルの下流にある。

  • 5回連続でリフレッシュに失敗した(スキップはこのカウントに含まれません)。

  • 複製グループまたはフェールオーバーグループで複製された動的テーブルである。 複製と動的テーブル をご参照ください。

  • クローン作成時にドロップされた1つ以上のベーステーブルを持つ動的テーブルからクローンされた。

動的テーブルが中断された理由を確認するには、次のようにしてください:

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで Monitoring » Dynamic Tables を選択します。

  3. 動的テーブルを選択し、 Table Details タブを開きます。

  4. Details の下にある Scheduling State にカーソルを合わせます。一時停止の理由と日付の詳細ダイアログが表示されます。