View a markdown version of this page

ODBC ドライバーバージョン 2.x と 1.x の違い - Amazon Redshift

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

ODBC ドライバーバージョン 2.x と 1.x の違い

このセクションでは、ODBC 1.x ドライバーODBC 2.x ドライバーの違いについて説明し、2.x ドライバーへの移行方法に関するガイダンスを示します。アプリケーションに影響を与える可能性のある変更とその対処方法について説明します。

対処が必要となる主な違い

次のアクションにより、最も一般的な移行の問題が解決されます。ほとんどのアプリケーションでは、これらのサブセットのみが必要です。

DSN と接続文字列

  • 削除または名前が変更された可能性のあるドライバーオプションについては、DSN を確認してください。一部の ODBC 1.x ドライバーオプションは、ODBC 2.x ドライバーではサポートされていません。その他のオプションは、名前が変更されました。詳細については、「接続文字列と DSN オプション」を参照してください。

  • アプリケーションがワイド文字タイプコード (SQL_WVARCHARSQL_WCHAR) に依存している場合は、UseUnicode=true を設定します。ODBC 2.x ドライバーでは、UseUnicode はデフォルトで false になり、ナロー文字タイプが報告されます。

  • ログ記録設定を [ODBC] セクションに移動します。Linux および macOS では、個別の DSN セクションではなく、odbc.ini のグローバル [ODBC] セクションで LogLevelLogPath を設定する必要があります。

クエリとスキーマ

  • SQLTables タイプフィルターに EXTERNAL TABLE を含めます。ODBC 2.x では、Amazon Redshift Spectrum テーブルとデータ共有テーブルの両方が EXTERNAL TABLE として報告されます。タイプで SQLTables をフィルタリングする場合は、EXTERNAL TABLE を追加してこれらのオブジェクトを表示し続けます。

  • 間隔データ型をサポートしていないアプリケーションに対しては、INTERVALVARCHAR にキャストします。一部のクライアントは ODBC 間隔タイプをサポートしていません。これらのクライアントの場合、次のようにクエリで列をキャストします: SELECT col::VARCHAR FROM ...

アプリケーションコード

  • クエリのタイムアウト設定を検証します。ODBC 2.x は、ODBC 仕様に従って正しく SQL_ATTR_QUERY_TIMEOUT を強制します。ODBC 1.x では、エラーを表示することなく、この設定は無視されました。以前には成功した長時間実行クエリが、タイムアウトエラーで失敗する場合があります。必要に応じてタイムアウト値を確認して調整してください。

  • data-at-execution パラメータのデータの長さを指定します。 2.x は SQL_NEED_LONG_DATA_LENY として報告します (1.x は N として報告しました)。SQL_DATA_AT_EXEC パラメータをバインドするアプリケーションでは、StrLen_or_IndPtr で合計データ長を事前に指定する必要があります。

接続文字列と DSN オプション

次の表は、名前が変更されたか、ODBC 2.x ドライバーで直接同等のオプションがある ODBC 1.x ドライバーのオプションを示しています。

1.x オプション 2.x の同等オプション 注意事項
MaxLongVarChar MaxLongVarcharSize デフォルトは 8190 から 65535 へ変更されました。
ConnectionTimeout LoginTimeout 接続タイムアウトは同じで、名前が変更されました。デフォルトは 0 (タイムアウトなし) です。
VpcEndpointUrl vpc_endpoint_url
SSLCertPath TrustStore-または-CaFile サーバーの検証に使用される CA 証明書へのパス。Windows では、これを [DSN セットアップ] ダイアログの [信頼ストア] フィールドで設定します。このダイアログには CaFile フィールドがないためです。両方が設定されている場合、TrustStore が優先されます。

現在の 2.x ドライバーでは、次の 1.x オプションはサポートされていません。2.x ドライバーはそれらを無視するため、接続には影響しません。DSN からのそれらの削除はオプションですが、混乱を避けるために削除することをお勧めします。

  • SingleRowMode – クライアントメモリを制限するには、代わりに StreamingCursorRows を使用します。

  • UseSystemTrustStore – サポートされていません。Windows では、1.x ドライバーは Windows システム証明書ストアに照らしてサーバー証明書を検証することができました。2.x ドライバーは CA 証明書ファイルに照らして検証を行います。デフォルトでは、バンドルされた Amazon Redshift ルート証明書を使用しますが、ユーザーが TrustStore または CaFile で指定したファイルを使用することもできます。

  • BoolsAsChar – アプリケーションが "0" および "1" 文字列 (SQL_VARCHAR) として返される BOOLEAN 列に依存している場合、クエリで列を VARCHAR にキャストします (例: SELECT col::VARCHAR FROM ...)。

  • TextAsLongVarcharCheckCertRevocationEnableAwsSdkLogsUseLogPrefixLocaleUseDeclareFetchUseMultipleStatementsEnforceSingleStatementEnableTableTypes – 現在のリリースでは同等ではありません。Amazon Redshift チームは、将来のリリースでこれらの同等オプションまたは代替オプションを検討中です。

サポートされる 2.x オプションの詳細なリストについては、「ODBC ドライバーオプション」を参照してください。

データ型の変更

次の表は、ODBC 仕様に準拠するために ODBC 2.x で変更された Amazon Redshift データ型マッピングを示しています。ほとんどのアプリケーションは、型コードではなくインデックスまたは名前で列をバインドするため、影響を受けません。

Amazon Redshift データタイプ ODBC 1.x ODBC 2.x
DOUBLE PRECISION SQL_FLOAT (6) SQL_DOUBLE (8)
INTERVAL YEAR TO MONTH SQL_VARCHAR (12)、テキスト SQL_INTERVAL_YEAR_TO_MONTH (107)、間隔構造
INTERVAL DAY TO SECOND SQL_VARCHAR (12)、テキスト SQL_INTERVAL_DAY_TO_SECOND (110)、間隔構造
VARCHAR / CHAR / TEXT ワイドタイプ (SQL_WVARCHARSQL_WCHARSQL_WLONGVARCHAR)、デフォルトは UseUnicode=true ナロータイプ (SQL_VARCHARSQL_CHARSQL_LONGVARCHAR)。UseUnicode=true を設定してワイドタイプを復元します。
GEOMETRY / GEOGRAPHY (SQL_C_BINARY として) 16 進エンコードされた ASCII 文字列 Raw バイナリバイト

SQLColumns によって返される COLUMN_SIZE の値は、GEOMETRYGEOGRAPHY、および SUPER データ型でも変更され、ODBC 仕様に従ってサイズ未設定の列を示すために NULL を返すようになりました。COLUMN_SIZE に基づいてバッファを割り当てるアプリケーションは、デフォルトのバッファサイズを使用して NULL を処理する必要があります。

移行後のトラブルシューティング

次の表は、移行後に発生する可能性がある、よくある問題とその解決方法を示しています。

症状 原因 対応方法
外部テーブルがスキーマブラウザに表示されない Spectrum テーブルとデータ共有テーブルは EXTERNAL TABLE として報告されます。 SQLTables タイプフィルターに EXTERNAL TABLE を含めます。
間隔列で pyodbc エラーが発生する pyodbc は ODBC 間隔タイプをサポートしていません。 クエリで間隔を VARCHAR にキャストします。
文字データが予期しない文字として表示される (文字化け) UseUnicode のデフォルトは false に変更されました。ワイド文字 (UTF-16) データを予期しているアプリケーションは、ナロー文字のバイトをワイドペアとして誤って解釈し、文字化けの出力を生成する場合があります。データ自体は変更されていません。 DSN で UseUnicode=true を設定するか、アプリケーションを更新して列を SQL_C_WCHAR ではなく SQL_C_CHAR としてバインドします。
長時間実行されるクエリがタイムアウトエラーを返す SQL_ATTR_QUERY_TIMEOUT が適用されるようになりました。ODBC 1.x では、エラーを表示することなくこの設定は無視されました。 DSN から QueryTimeout を増減するか、アプリケーションで SQL_ATTR_QUERY_TIMEOUT を 0 に設定します。
SQL_ATTR_CURRENT_CATALOG を設定すると HY011 が返される この属性はオープン接続では設定できません。オープン接続でのデータベースの切り替えはサポートされていません。 接続する前に属性を設定するか、ターゲットデータベースで接続を閉じて再度開きます。
デュアルスタック環境で接続がハングする バージョン 2.1.16 以前での制限です。 2.1.17 以降にアップグレード。
エラーメッセージ解析で予期しない結果が返される メッセージ形式が変更されました。SQLSTATE コードに変更はありません。 メッセージテキストの代わりに SQLSTATE コードを解析します。
Data-at-execution パラメータのバインディング動作が異なる SQL_NEED_LONG_DATA_LEN は FALSE から TRUE に変更されました。SQL_DATA_AT_EXEC を使用するアプリケーションは、合計データ長を事前に指定する必要があります。 SQL_DATA_AT_EXEC パラメータをバインドするときに、StrLen_or_IndPtr で長さの値を設定します。
ドライバーログが生成されない LogLevel および LogPath は、個別の DSN セクションではなく、odbc.ini[ODBC] グローバルセクションにある必要があります。 ログ記録設定を DSN から [ODBC] セクションに移動します。

古い ODBC 2.x バージョンからのアップグレード

古い ODBC 2.x バージョンを既に実行している場合は、最新のリリースにアップグレードしてください。すべてのバージョンでの機能強化とバグ修正の詳細なリストについては、GitHub の「Amazon Redshift ODBC ドライバー変更ログ」を参照してください。

詳細情報