View a markdown version of this page

システムテーブルのクエリ - Amazon Redshift

Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、ブログ記事を参照してください。

システムテーブルのクエリ

ドライバーメタデータ API も SHOW コマンドもニーズに合わない場合は、PostgreSQL カタログテーブル (pg_*)、情報スキーマ (information_schema)、SVV_TABLE_INFO などの Amazon Redshift システムビューに対して直接クエリを実行できます。

このアプローチは、Amazon Redshift Query Editor v2 や psql など、インタラクティブな SQL クエリから実行するアドホック検索、デバッグ、または管理タスクに役立ちます。ただし、システムカタログ構造は各 Amazon Redshift リリースで変更される可能性があります。本番稼働アプリケーション統合のメタデータインターフェイスとして、システムテーブルのクエリに直接依存することはお勧めしません。

システムテーブルに対してクエリを実行するときは、次のプラクティスに従います。

  • データベース、スキーマ、およびテーブルを指定します。最善のパフォーマンスを得るには、クエリフィルターにデータベース名、スキーマ名、およびテーブル名を含めます。スコープを絞り込むと、Amazon Redshift がスキャンして返す必要があるメタデータの量が減ります。

  • 等価フィルターまたは LIKE フィルターを使用しますWHERE 句で等価 (=) または LIKE 述語を使用して結果を絞り込みます。大規模なカタログビューに対して、フィルタリングされていないクエリを実行することは避けてください。オブジェクトが多いクラスターではクエリが低速になる可能性があります。

  • フィルター述語で関数を使用しないでください。システムテーブルクエリをフィルタリングするときは、WHERE 句で LOWER() や文字列連結などの関数を使用しないでください。これらの操作を行うと、メタデータの効率的な検索が妨げられ、クエリのパフォーマンスが大幅に低下する可能性があります。

アンチパターンと推奨クエリの比較の例

-- Avoid: SELECT * FROM svv_all_columns; -- Recommended: SELECT * FROM svv_all_columns WHERE database_name = 'dev' and schema_name = 'public' AND table_name = 'sales';
-- Avoid: SELECT * FROM svv_all_columns WHERE LOWER(schema_name) = 'public'; -- Recommended: SELECT * FROM svv_all_columns WHERE schema_name = 'public' AND table_name LIKE 'sales%';
-- Avoid: SELECT * FROM svv_all_columns WHERE database_name || '.' || schema_name || '.' || table_name = 'dev.public.sales'; -- Recommended: SELECT * FROM svv_all_columns WHERE database_name = 'dev' and schema_name = 'public' AND table_name = 'sales';
-- Avoid: SELECT * FROM svv_all_columns WHERE CONCAT(database_name, '.', schema_name) = 'dev.public'; -- Recommended: SELECT * FROM svv_all_columns WHERE database_name = 'dev' and schema_name = 'public';