

 Amazon Redshift は、2026 年 6 月 30 日以降、Python UDF の使用をサポートしなくなります。これは段階的に実施されます。Python のサポート終了と移行オプションの詳細については、2025 年 6 月 30 日に公開された[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# アプリケーションとツールに Amazon Redshift ドライバーメタデータ API を使用する
<a name="discovering-metadata-driver-api"></a>

ビジネスインテリジェンスツールやクエリエディタなど、Amazon Redshift に接続するアプリケーションやツールの場合は、Amazon Redshift [JDBC 2.x](jdbc20-install.md)、[ODBC 2.x](odbc20-install.md)、または [Python](python-redshift-driver.md) ドライバーが提供するドライバーメタデータ 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() を使用したテーブルメタデータの取得
<a name="discovering-metadata-example-jdbc"></a>

```
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() を使用した列メタデータの取得
<a name="discovering-metadata-example-python"></a>

```
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() を使用したプライマリキーメタデータの取得
<a name="discovering-metadata-example-odbc"></a>

```
// 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() を使用したデータベースとスキーマの一覧表示
<a name="discovering-metadata-example-odbc-sqltables"></a>

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

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

`CatalogName` を `SQL_ALL_CATALOGS` に設定して `SQLTables()` を呼び出します。`SchemaName` と `TableName` を空の文字列に設定します。結果セットは、`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)
```

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

`SchemaName` を `SQL_ALL_SCHEMAS` に設定して `SQLTables()` を呼び出します。`CatalogName` と `TableName` を空の文字列に設定します。

```
// 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` も入力します。