Amazon Redshift tidak akan lagi mendukung pembuatan UDF Python baru mulai Patch 198. UDF Python yang ada akan terus berfungsi hingga 30 Juni 2026. Untuk informasi lebih lanjut, lihat posting blog
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Perbedaan antara versi 2.x dan 1.x dari driver ODBC
Bagian ini menjelaskan perbedaan antara driver ODBC 1.x dan driver ODBC 2.x, dan memberikan panduan tentang cara bermigrasi ke driver 2.x. Ini menjelaskan perubahan yang mungkin memengaruhi aplikasi Anda dan cara mengatasinya.
Perbedaan utama untuk diatasi
Tindakan berikut menyelesaikan masalah migrasi yang paling umum. Sebagian besar aplikasi hanya membutuhkan sebagian dari ini.
DSN dan string koneksi
-
Tinjau DSN Anda untuk opsi driver yang mungkin telah dihapus atau diganti namanya. Beberapa opsi driver ODBC 1.x tidak didukung di driver ODBC 2.x. Lainnya telah berganti nama. Lihat String koneksi dan opsi DSN untuk detail.
-
Tetapkan
UseUnicode=truejika aplikasi Anda bergantung pada kode tipe karakter lebar (SQL_WVARCHAR,SQL_WCHAR). Di driver ODBC 2.x,UseUnicodedefaultnyafalse, yang melaporkan tipe karakter sempit. -
Pindahkan pengaturan logging ke
[ODBC]bagian. Di Linux dan macOS,LogLeveldanLogPathharus diatur di bagian globalodbc.ini, bukan di[ODBC]bagian DSN individual.
Kueri dan skema
-
Sertakan
EXTERNAL TABLEdalam filterSQLTablestipe. Di ODBC 2.x, tabel Amazon Redshift Spectrum dan tabel datashare dilaporkan sebagai.EXTERNAL TABLEJika Anda memfilterSQLTablesberdasarkan jenis, tambahkanEXTERNAL TABLEuntuk terus melihat objek-objek ini. -
Transmisikan
INTERVALkeVARCHARaplikasi yang tidak mendukung tipe data interval. Beberapa klien tidak mendukung jenis interval ODBC. Untuk klien tersebut, kirimkan kolom dalam kueri Anda:SELECT col::VARCHAR FROM ...
Kode aplikasi
-
Verifikasi pengaturan batas waktu kueri. ODBC 2.x memberlakukan dengan benar
SQL_ATTR_QUERY_TIMEOUTsesuai spesifikasi ODBC. ODBC 1.x diam-diam mengabaikan pengaturan ini. Long-running kueri yang sebelumnya berhasil mungkin sekarang gagal dengan kesalahan batas waktu. Tinjau dan sesuaikan nilai batas waktu Anda sesuai kebutuhan. -
Berikan panjang data untuk parameter data-at-eksekusi. 2.x melaporkan
SQL_NEED_LONG_DATA_LENsebagaiY(1.x dilaporkanN). Aplikasi yang mengikatSQL_DATA_AT_EXECparameter sekarang harus menyediakan total panjang data diStrLen_or_IndPtrdepan.
String koneksi dan opsi DSN
Tabel berikut menunjukkan opsi driver ODBC 1.x yang telah diganti namanya atau memiliki ekuivalen langsung dalam driver ODBC 2.x.
| Opsi 1.x | 2.x setara | Catatan |
|---|---|---|
MaxLongVarChar |
MaxLongVarcharSize |
Default berubah dari 8190 menjadi 65535. |
ConnectionTimeout |
LoginTimeout |
Batas waktu koneksi yang sama, diganti namanya. Default ke 0 (tidak ada batas waktu). |
VpcEndpointUrl |
vpc_endpoint_url |
|
SSLCertPath |
TrustStore atau CaFile |
Jalur ke sertifikat CA yang digunakan untuk memverifikasi server. Di Windows, atur ini di bidang Trust Store dari dialog pengaturan DSN; dialog tidak memiliki CaFile bidang. Jika keduanya ditetapkan, TrustStore ambil prioritas. |
Opsi 1.x berikut tidak didukung di driver 2.x saat ini. Driver 2.x mengabaikannya, sehingga tidak memengaruhi koneksi Anda. Menghapusnya dari DSN Anda adalah opsional tetapi disarankan untuk menghindari kebingungan.
-
SingleRowMode— untuk membatasi memori klien, gunakanStreamingCursorRowssebagai gantinya. -
UseSystemTrustStoreTidak didukung. Pada Windows, driver 1.x dapat memvalidasi sertifikat server terhadap penyimpanan sertifikat sistem Windows. Driver 2.x memvalidasi terhadap file sertifikat CA: driver menggunakan sertifikat root Amazon Redshift yang dibundel secara default, atau file yang Anda tentukan dalam atau.TrustStoreCaFile -
BoolsAsChar— jika aplikasi Anda mengandalkan kolom BOOLEAN yang dikembalikan sebagai"0"dan"1"string (SQL_VARCHAR), lemparkan kolom keVARCHARdalam kueri Anda, misalnya.SELECT col::VARCHAR FROM ... -
TextAsLongVarchar,CheckCertRevocation,EnableAwsSdkLogs,UseLogPrefix,,Locale,UseDeclareFetch,UseMultipleStatementsEnforceSingleStatement,EnableTableTypes— tidak ada padanan dalam rilis saat ini. Tim Amazon Redshift sedang mengevaluasi ekuivalen atau alternatif untuk opsi ini di rilis mendatang.
Untuk daftar lengkap opsi 2.x yang didukung, lihatOpsi driver ODBC.
Perubahan tipe data
Tabel berikut menunjukkan pemetaan tipe data Amazon Redshift yang berubah di ODBC 2.x agar sesuai dengan spesifikasi ODBC. Sebagian besar aplikasi tidak terpengaruh karena mereka mengikat kolom berdasarkan indeks atau nama daripada berdasarkan kode jenis.
| Jenis data Amazon Redshift | ODBC 1.x | ODBC 2.x |
|---|---|---|
DOUBLE PRECISION |
SQL_FLOAT(6) |
SQL_DOUBLE (8) |
INTERVAL YEAR TO MONTH |
SQL_VARCHAR(12), teks |
SQL_INTERVAL_YEAR_TO_MONTH(107), interval struct |
INTERVAL DAY TO SECOND |
SQL_VARCHAR(12), teks |
SQL_INTERVAL_DAY_TO_SECOND(110), interval struct |
VARCHAR / CHAR /
TEXT |
Jenis yang luas (SQL_WVARCHAR,SQL_WCHAR,SQL_WLONGVARCHAR); default UseUnicode=true |
Jenis sempit (SQL_VARCHAR,SQL_CHAR,SQL_LONGVARCHAR). Setel UseUnicode=true untuk mengembalikan tipe lebar. |
GEOMETRY/GEOGRAPHY(sebagaiSQL_C_BINARY) |
Hex-encoded Tali ASCII | Byte biner mentah |
COLUMN_SIZENilai yang dikembalikan oleh SQLColumns juga diubah untukGEOMETRY,GEOGRAPHY, dan tipe SUPER data, yang sekarang mengembalikan NULL untuk menunjukkan kolom yang tidak berukuran sesuai spesifikasi ODBC. Aplikasi yang mengalokasikan buffer berdasarkan COLUMN_SIZE harus menangani NULL dengan menggunakan ukuran buffer default.
Post-migration pemecahan masalah
Tabel berikut menjelaskan masalah umum yang mungkin Anda temui setelah bermigrasi dan cara mengatasinya.
| Gejala | Penyebab | Apa yang harus dilakukan |
|---|---|---|
| Tabel eksternal tidak terlihat di browser skema | Tabel spektrum dan datashare dilaporkan sebagai EXTERNAL
TABLE |
Sertakan EXTERNAL TABLE dalam SQLTables jenis filter. |
| kesalahan pyodbc pada kolom interval | pyodbc tidak mendukung jenis interval ODBC | Cast interval ke VARCHAR dalam kueri. |
| Data karakter ditampilkan sebagai karakter tak terduga (mojibake) | UseUnicodedefault diubah menjadifalse. Aplikasi yang mengharapkan data karakter lebar (UTF-16) mungkin salah menafsirkan byte karakter sempit sebagai pasangan lebar, menghasilkan keluaran yang kacau. Data itu sendiri tidak berubah. |
Setel UseUnicode=true di DSN Anda, atau perbarui aplikasi Anda untuk mengikat kolom sebagai SQL_C_CHAR gantinya. SQL_C_WCHAR |
| Long-running kueri mengembalikan kesalahan batas waktu | SQL_ATTR_QUERY_TIMEOUTsekarang ditegakkan. ODBC 1.x diam-diam mengabaikan pengaturan ini. |
Tingkatkan atau hapus QueryTimeout dari DSN Anda, atau atur SQL_ATTR_QUERY_TIMEOUT ke 0 di aplikasi Anda. |
Mengatur SQL_ATTR_CURRENT_CATALOG pengembalian HY011 |
Atribut tidak dapat diatur pada koneksi terbuka. Mengalihkan database pada koneksi terbuka tidak didukung. | Mengatur atribut sebelum menghubungkan, atau menutup dan membuka kembali koneksi pada database target. |
| Koneksi macet di lingkungan dual-stack | Batasan dalam versi <= 2.1.16 | Upgrade ke 2.1.17 atau yang lebih baru. |
| Penguraian pesan kesalahan mengembalikan hasil yang tidak terduga | Format pesan berubah; Kode SQLSTATE tidak berubah | Parse kode SQLSTATE bukan teks pesan. |
| Data-at-execution pengikatan parameter berperilaku berbeda | SQL_NEED_LONG_DATA_LENberubah dari FALSE menjadi TRUE; aplikasi yang menggunakan sekarang SQL_DATA_AT_EXEC harus memberikan total panjang data di depan |
Atur nilai panjang StrLen_or_IndPtr saat mengikat SQL_DATA_AT_EXEC parameter. |
| Log driver tidak dihasilkan | LogLeveldan LogPath harus berada di bagian [ODBC] globalodbc.ini, bukan di bagian DSN individu |
Pindahkan pengaturan logging dari DSN Anda ke [ODBC] bagian. |
Memutakhirkan dari versi ODBC 2.x yang lebih lama
Jika Anda sudah menjalankan versi ODBC 2.x yang lebih lama, tingkatkan ke rilis terbaru. Untuk daftar lengkap penyempurnaan dan perbaikan bug di semua versi, lihat log on perubahan driver Amazon Redshift ODBC