スキーマ:

ACCOUNT_USAGE

TABLE_PRUNING_HISTORY ビュー

このAccount Usageビューを使用して、すべてのテーブルに対する排除の効率性を判断したり、テーブルのデフォルトの(自然な)データ並び替えが排除にどのように影響するかを理解したりできます。

排除されたパーティションの数 (PARTITIONS_PRUNED) と、スキャンおよび排除されたパーティションの合計数 (PARTITIONS_SCANNED + PARTITIONS_PRUNED) を比較できます。

このビューの各行は、指定された時間間隔内の特定のテーブルのプルーニング履歴を表します。データは時間間隔ごとに集計され、スキャン数、スキャンされたパーティション数、プルーニングされたパーティション数、スキャンされた行数、プルーニングされた行数に関する情報が含まれます。

またこのビューを使用して、テーブルの 自動クラスタリング および 検索の最適化 を有効化する前と後の排除の効果を比較できます。

TABLE_QUERY_PRUNING_HISTORY ビュー および COLUMN_QUERY_PRUNING_HISTORY ビュー もご参照ください。

列名

データ型

説明

START_TIME

TIMESTAMP_LTZ

クエリが実行され、完了した時間範囲の開始時刻(時間単位)。

END_TIME

TIMESTAMP_LTZ

クエリが実行され、完了した時間範囲の終了時刻(時間単位)。

TABLE_ID

NUMBER

クエリされたテーブルの内部/システム生成識別子。

TABLE_NAME

VARCHAR

クエリされたテーブルの名前。

SCHEMA_ID

NUMBER

クエリされたテーブルを含むスキーマの内部/システム生成識別子。

SCHEMA_NAME

VARCHAR

クエリされたテーブルを含むスキーマの名前。

DATABASE_ID

NUMBER

クエリされたテーブルを含むデータベースの内部/システム生成識別子。

DATABASE_NAME

VARCHAR

クエリされたテーブルを含むデータベースの名前。

NUM_SCANS

NUMBER

テーブルの START_TIME から END_TIME の期間の全クエリ(SELECT ステートメントや DML ステートメントを含む)からのスキャン操作の数。クエリによっては、同じテーブルに対してスキャン操作が複数回行われる場合があります。

PARTITIONS_SCANNED

NUMBER

NUM_SCANS に記述されているスキャン処理中にスキャンされたパーティションの数。

PARTITIONS_PRUNED

NUMBER

NUM_SCANS で説明されているクエリに対してプルーニングされたパーティションの数。これらのパーティションはクエリ処理中に削除され、クエリの効率が向上しました。

ROWS_SCANNED

NUMBER

NUM_SCANS に記述されているスキャン処理中にスキャンされた行の数。

ROWS_PRUNED

NUMBER

NUM_SCANS で説明されているクエリに対してプルーニングされた行の数。これらの行はクエリ処理中に削除され、クエリの効率が向上しました。

使用上の注意

  • ビューの待機時間は最大6時間です。

  • このビューには、 ハイブリッドテーブル の排除情報は含まれません。

  • このビューには、クエリごとに実行時間の長い上位1,000件のテーブルスキャンのデータが保持されます。非常に複雑なクエリだけがこのスキャン数を超えるため、データが省略されることはほとんどありません。

過去7日以内に排除の効率が最も低かったテーブルの上位5つを表示します。

SELECT table_id, ANY_VALUE(table_name) AS table_name, SUM(num_scans) AS total_num_scans, SUM(partitions_scanned) AS total_partitions_scanned, SUM(partitions_pruned) AS total_partitions_pruned, SUM(rows_scanned) AS total_rows_scanned, SUM(rows_pruned) AS total_rows_pruned FROM SNOWFLAKE.ACCOUNT_USAGE.TABLE_PRUNING_HISTORY WHERE start_time >= DATEADD(day, -7, CURRENT_TIMESTAMP()) GROUP BY table_id ORDER BY total_partitions_pruned / GREATEST(total_partitions_scanned + total_partitions_pruned, 1), total_partitions_scanned DESC LIMIT 5; 
Copy
+----------+----------------+-----------------+--------------------------+-------------------------+--------------------+-------------------+ | TABLE_ID | TABLE_NAME | TOTAL_NUM_SCANS | TOTAL_PARTITIONS_SCANNED | TOTAL_PARTITIONS_PRUNED | TOTAL_ROWS_SCANNED | TOTAL_ROWS_PRUNED | |----------+----------------+-----------------+--------------------------+-------------------------+--------------------+-------------------| | 308226 | SENSOR_DATA_TS | 11 | 21 | 1 | 52500000 | 2500000 | | 185364 | MATCH | 16 | 14 | 2 | 240968 | 34424 | | 209932 | ORDER_HEADER | 2 | 300 | 56 | 421051748 | 75350790 | | 209922 | K7_T1 | 261 | 261 | 52 | 30421 | 3272 | | 338948 | SENSOR_DATA_TS | 9 | 15 | 3 | 38880000 | 8035200 | +----------+----------------+-----------------+--------------------------+-------------------------+--------------------+-------------------+ 

上の例では GREATEST を使用して、スキャンされたパーティションの合計数と、排除されたパーティションの数がゼロの場合に、ゼロ除算が起きることを防いでいます。