Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊,請參閱部落格文章
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
ODBC 驅動程式的 2.x 和 1.x 版本之間的差異
本節說明 ODBC 1.x 驅動程式與 ODBC 2.x 驅動程式之間的差異,並提供如何遷移至 2.x 驅動程式的指引。它說明可能會影響您應用程式的變更,以及如何解決這些變更。
要解決的主要差異
下列動作可解決最常見的遷移問題。大多數應用程式只需要其中一部分。
DSN 和連線字串
-
檢閱您的 DSN 是否有可能已移除或重新命名的驅動程式選項。ODBC 2.x 驅動程式不支援某些 ODBC 1.x 驅動程式選項。其他 已重新命名。如需詳細資訊,請參閱 連線字串和 DSN 選項。
-
UseUnicode=true如果您的應用程式取決於寬字元類型代碼 (SQL_WVARCHAR、),請設定SQL_WCHAR。在 ODBC 2.x 驅動程式中,UseUnicode預設為false,報告窄字元類型。 -
將記錄設定移至
[ODBC]區段。在 Linux 和 macOS 上,LogLevel和LogPath必須在 的全域[ODBC]區段中設定odbc.ini,而不是在個別 DSN 區段中設定。
查詢和結構描述
-
包含在
SQLTables類型篩選條件EXTERNAL TABLE中。在 ODBC 2.x 中,Amazon Redshift Spectrum 資料表和資料共用資料表都會報告為EXTERNAL TABLE。如果您SQLTables依類型篩選,請新增EXTERNAL TABLE以繼續查看這些物件。 -
INTERVALVARCHAR為不支援間隔資料類型的應用程式轉換為 。有些用戶端不支援 ODBC 間隔類型。對於這些用戶端,請在查詢中轉換 欄:SELECT col::VARCHAR FROM ...
應用程式碼
-
驗證查詢逾時設定。ODBC 2.x
SQL_ATTR_QUERY_TIMEOUT會根據 ODBC 規格正確強制執行。ODBC 1.x 無提示地忽略此設定。先前成功的長時間執行查詢現在可能會失敗,並出現逾時錯誤。視需要檢閱和調整您的逾時值。 -
提供data-at-execution參數的資料長度。 2.x 報告
SQL_NEED_LONG_DATA_LEN為Y(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 ...。 -
TextAsLongVarchar、CheckCertRevocation、EnableAwsSdkLogs、UseLogPrefix、Locale、UseDeclareFetch、UseMultipleStatements、EnforceSingleStatement、EnableTableTypes– 目前版本中沒有同等項目。Amazon Redshift 團隊正在評估未來版本中這些選項的對等項目或替代方案。
如需支援 2.x 選項的完整清單,請參閱 ODBC 驅動器選項。
資料類型變更
下表顯示在 ODBC 2.x 中變更以符合 ODBC 規格的 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_WVARCHAR、SQL_WCHAR、SQL_WLONGVARCHAR);預設 UseUnicode=true |
縮小類型 (SQL_VARCHAR、SQL_CHAR、SQL_LONGVARCHAR)。UseUnicode=true 設定為還原各種類型。 |
GEOMETRY / GEOGRAPHY(做為 SQL_C_BINARY) |
十六進位編碼 ASCII 字串 | 原始二進位位元組 |
對於 GEOMETRY、 和 SUPER資料類型GEOGRAPHY, 傳回COLUMN_SIZE的值SQLColumns也會變更,現在會傳回 NULL,以根據 ODBC 規格指示未調整大小的資料欄。根據 配置緩衝的應用程式COLUMN_SIZE必須使用預設緩衝區大小來處理 NULL。
遷移後疑難排解
下表說明遷移後可能遇到的常見問題,以及如何解決這些問題。
| 徵狀 | 原因 | 處理方式 |
|---|---|---|
| 結構描述瀏覽器中看不到外部資料表 | Spectrum 和資料共用資料表報告為 EXTERNAL TABLE |
包含在SQLTables類型篩選條件EXTERNAL TABLE中。 |
| 間隔資料欄上的 pyodbc 錯誤 | pyodbc 不支援 ODBC 間隔類型 | 在查詢VARCHAR中將間隔轉換為 。 |
| 字元資料會顯示為非預期的字元 (mojibake) | UseUnicode 預設變更為 false。預期使用廣字元 (UTF-16) 資料的應用程式可能會錯誤地將窄字元位元組解譯為寬對,產生亂碼輸出。資料本身保持不變。 |
在 DSN UseUnicode=true中設定 ,或更新您的應用程式以繫結資料欄,SQL_C_CHAR而非 SQL_C_WCHAR。 |
| 長時間執行的查詢會傳回逾時錯誤 | SQL_ATTR_QUERY_TIMEOUT 現已強制執行。ODBC 1.x 無提示地忽略此設定。 |
QueryTimeout 從 DSN 中增加或移除,或在應用程式中將 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 必須位於 的[ODBC]全域區段odbc.ini,而非個別 DSN 區段 |
將記錄設定從 DSN 移至 [ODBC]區段。 |
從舊版 ODBC 2.x 升級
如果您已執行較舊的 ODBC 2.x 版本,請升級至最新版本。如需所有版本的完整增強功能和錯誤修正清單,請參閱 GitHub 上的 Amazon Redshift ODBC 驅動程式變更日誌