View a markdown version of this page

Perbedaan antara versi 2.x dan 1.x dari driver ODBC - Amazon Redshift

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=true jika aplikasi Anda bergantung pada kode tipe karakter lebar (SQL_WVARCHAR,SQL_WCHAR). Di driver ODBC 2.x, UseUnicode defaultnyafalse, yang melaporkan tipe karakter sempit.

  • Pindahkan pengaturan logging ke [ODBC] bagian. Di Linux dan macOS, LogLevel dan LogPath harus diatur di bagian globalodbc.ini, bukan di [ODBC] bagian DSN individual.

Kueri dan skema

  • Sertakan EXTERNAL TABLE dalam filter SQLTables tipe. Di ODBC 2.x, tabel Amazon Redshift Spectrum dan tabel datashare dilaporkan sebagai. EXTERNAL TABLE Jika Anda memfilter SQLTables berdasarkan jenis, tambahkan EXTERNAL TABLE untuk terus melihat objek-objek ini.

  • Transmisikan INTERVAL ke VARCHAR aplikasi 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_TIMEOUT sesuai 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_LEN sebagai Y (1.x dilaporkanN). Aplikasi yang mengikat SQL_DATA_AT_EXEC parameter sekarang harus menyediakan total panjang data di StrLen_or_IndPtr depan.

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, gunakan StreamingCursorRows sebagai 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. TrustStore CaFile

  • BoolsAsChar— jika aplikasi Anda mengandalkan kolom BOOLEAN yang dikembalikan sebagai "0" dan "1" string (SQL_VARCHAR), lemparkan kolom ke VARCHAR dalam 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. GitHub

Informasi selengkapnya