View a markdown version of this page

アプリケーションとツールに Amazon Redshift ドライバーメタデータ API を使用する - Amazon Redshift

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

アプリケーションとツールに Amazon Redshift ドライバーメタデータ API を使用する

ビジネスインテリジェンスツールやクエリエディタなど、Amazon Redshift に接続するアプリケーションやツールの場合は、Amazon Redshift JDBC 2.xODBC 2.x、または Python ドライバーが提供するドライバーメタデータ API を使用して、データベース、スキーマ、テーブル、列、データ型などのデータウェアハウスオブジェクトに関するメタデータを検出することをお勧めします。あるいは、Amazon Redshift SHOW コマンドを使用することもできます。

ドライバーメタデータ API を使用すると、次の利点が得られます。

  • 仕様に準拠する。JDBC および ODBC ドライバーは、標準のメタデータインターフェイス (JDBC では DatabaseMetaData、ODBC では SQLTables および SQLColumns) を実装しています。Python の DB-API (PEP 249) はメタデータ API 仕様を定義していないため、Amazon Redshift Python ドライバーは JDBC DatabaseMetaData 仕様に従い、get_tables()get_columns()get_schemas() などの同等のメソッドを提供します。これらの API は明確に定義された仕様に従っているため、統合コードは移植可能になります。Amazon Redshift はその内部システムテーブルを進化させているため、アプリケーションを変更する必要はありません。

  • パフォーマンスが最適化される。ドライバーメタデータ API は、メタデータを効率的に返すように最適化されています。AWS は今後もドライバーメタデータ API のパフォーマンスへの投資を継続します。

  • 上位互換性が得られる。Amazon Redshift は、JDBC、ODBC、および Python コネクタの仕様に準拠しています。これらの標準 API に合わせてコーディングすると、アプリケーションは基盤となるシステムカタログ構造の変更から保護されます。

例: JDBC DatabaseMetaData.getTables() を使用したテーブルメタデータの取得

DatabaseMetaData dbmd = connection.getMetaData(); // getTables(catalog, schemaPattern, tableNamePattern, types) // catalog: "test" — filters to the database named "test" // schemaPattern: "test_pattern" — filters schemas matching this pattern (supports SQL wildcards % and _) // tableNamePattern: null — no filter, returns all table names // types: {"TABLE", "EXTERNAL TABLE"} — only return regular tables and external tables ResultSet rs = dbmd.getTables("test", "test_pattern", null, new String[] {"TABLE", "EXTERNAL TABLE"});

例: Python cursor.get_columns() を使用した列メタデータの取得

cursor: redshift_connector.Cursor = conn.cursor() # get_columns(catalog, schema_pattern, table_name_pattern, column_name_pattern) # catalog: 'test' — filters to the database named "test" # schema_pattern: 'test_pattern' — filters schemas matching this pattern (supports SQL wildcards % and _) # table_name_pattern: 'testabc' — filters to the table named "testabc" # column_name_pattern: '%' — wildcard, returns all columns in the matching table result: tuple = cursor.get_columns('test', 'test_pattern', 'testabc', '%')

例: ODBC SQLPrimaryKeys() を使用したプライマリキーメタデータの取得

// SQLPrimaryKeys(hstmt, catalog, catalog_len, schema, schema_len, table, table_len) // catalog: "test" — filters to the database named "test" // schema: "test_schema" — filters to the schema named "test_schema" // table: "test_table" — retrieves primary key columns for this table // Note: Unlike getTables/getColumns, SQLPrimaryKeys does NOT support wildcard patterns. retcode = SQLPrimaryKeys(hstmt, (SQLCHAR *)"test", SQL_NTS, (SQLCHAR *)"test_schema", SQL_NTS, (SQLCHAR *)"test_table", SQL_NTS); while (SQL_SUCCEEDED(retcode = SQLFetch(hstmt))) { for (i = 1; i <= columns; i++) { retcode = SQLGetData(hstmt, i, SQL_C_CHAR, buf, sizeof(buf), &indicator); } }

例: ODBC SQLTables() を使用したデータベースとスキーマの一覧表示

ODBC API は、カタログまたはスキーマを一覧表示するための個別の関数を提供していません。代わりに、SQLTables() の特別な呼び出し規則を使用してこの情報を取得します。

すべてのデータベースを一覧表示するには (カタログ)

CatalogNameSQL_ALL_CATALOGS に設定して SQLTables() を呼び出します。SchemaNameTableName を空の文字列に設定します。結果セットは、TABLE_CAT 列のみの有効な値を返します。他のすべての列には NULL が含まれています。

// List all catalogs (databases) available on the data source. retcode = SQLTables(hstmt, (SQLCHAR *)SQL_ALL_CATALOGS, SQL_NTS, // CatalogName = "%" (SQL_ALL_CATALOGS) (SQLCHAR *)"", 0, // SchemaName = "" (empty string) (SQLCHAR *)"", 0, // TableName = "" (empty string) NULL, 0); // TableType = NULL (not filtered)

すべてのスキーマを一覧表示するには

SchemaNameSQL_ALL_SCHEMAS に設定して SQLTables() を呼び出します。CatalogNameTableName を空の文字列に設定します。

// List all schemas available on the data source. retcode = SQLTables(hstmt, (SQLCHAR *)"", 0, // CatalogName = "" (empty string) (SQLCHAR *)SQL_ALL_SCHEMAS, SQL_NTS, // SchemaName = "%" (SQL_ALL_SCHEMAS) (SQLCHAR *)"", 0, // TableName = "" (empty string) NULL, 0); // TableType = NULL (not filtered)
注記

ODBC 仕様では、スキーマの列挙に対して TABLE_SCHEM のみが有効として定義されています。また、Amazon Redshift はクロスデータベースメタデータ検出をサポートし、各スキーマのスコープは特定のデータベースであるため、TABLE_CAT も入力します。