Amazon Redshift unterstützt ab Patch 198 nicht mehr die Erstellung neuer Python-UDFs. Bestehende Python-UDFs werden bis zum 30. Juni 2026 weiterhin funktionieren. Weitere Informationen finden Sie im Blog-Posting
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Unterschiede zwischen den Versionen 2.x und 1.x des ODBC-Treibers
Dieser Abschnitt beschreibt die Unterschiede zwischen dem ODBC 1.x-Treiber und dem ODBC 2.x-Treiber und bietet Anleitungen zur Migration zum 2.x-Treiber. Es beschreibt die Änderungen, die sich auf Ihre Anwendung auswirken könnten, und wie Sie diese beheben können.
Die wichtigsten Unterschiede, die es zu beheben gilt
Die folgenden Aktionen lösen die häufigsten Migrationsprobleme. Die meisten Anwendungen benötigen nur eine Teilmenge davon.
DSN und Verbindungszeichenfolge
-
Suchen Sie in Ihrem DSN nach Treiberoptionen, die möglicherweise entfernt oder umbenannt wurden. Einige ODBC 1.x-Treiberoptionen werden im ODBC 2.x-Treiber nicht unterstützt. Andere wurden umbenannt. Details dazu finden Sie unter Verbindungszeichenfolge und DSN-Optionen.
-
Stellen Sie ein
UseUnicode=true, ob Ihre Anwendung auf Codes vom Typ „Breite Zeichen“ (SQL_WVARCHAR,SQL_WCHAR) angewiesen ist. Im ODBC 2.x-Treiber istUseUnicodestandardmäßigfalse, was schmale Zeichentypen meldet. -
Verschieben Sie die Protokollierungseinstellungen in den Abschnitt.
[ODBC]Unter Linux und macOSLogLevelundLogPathmuss im globalen[ODBC]Abschnitt von festgelegt werdenodbc.ini, nicht in einem einzelnen DSN-Abschnitt.
Abfrage und Schema
-
EXTERNAL TABLEInSQLTablesTypfilter einbeziehen. In ODBC 2.x werden sowohl Amazon Redshift Spectrum-Tabellen als auch Datashare-Tabellen als gemeldet.EXTERNAL TABLEWenn SieSQLTablesnach Typ filtern, fügen Sie hinzu,EXTERNAL TABLEdamit diese Objekte weiterhin angezeigt werden. -
Umwandlung
INTERVALinVARCHARfür Anwendungen, die den Intervall-Datentyp nicht unterstützen. Einige Clients unterstützen ODBC-Intervalltypen nicht. Geben Sie für diese Clients die Spalte in Ihrer Abfrage wie folgt ein:SELECT col::VARCHAR FROM ...
Anwendungscode
-
Überprüfen Sie die Timeout-Einstellungen für Abfragen. ODBC 2.x setzt die Anforderungen
SQL_ATTR_QUERY_TIMEOUTgemäß der ODBC-Spezifikation korrekt um. ODBC 1.x hat diese Einstellung stillschweigend ignoriert. Long-running Abfragen, die zuvor erfolgreich waren, schlagen jetzt möglicherweise mit einem Timeout-Fehler fehl. Überprüfen Sie Ihre Timeout-Werte und passen Sie sie nach Bedarf an. -
Geben Sie die Datenlänge für die Parameter „Data-at-Execution“ an. 2.x meldet
SQL_NEED_LONG_DATA_LENalsY(1.x gemeldet).NAnwendungen, dieSQL_DATA_AT_EXECParameter binden, müssen jetzt die gesamte Datenlänge im Voraus angeben.StrLen_or_IndPtr
Verbindungszeichenfolge und DSN-Optionen
Die folgende Tabelle zeigt ODBC 1.x-Treiberoptionen, die entweder umbenannt wurden oder direkte Entsprechungen im ODBC 2.x-Treiber haben.
| Option 1.x | Äquivalent zu 2.x | Hinweise |
|---|---|---|
MaxLongVarChar |
MaxLongVarcharSize |
Die Standardeinstellung wurde von 8190 auf 65535 geändert. |
ConnectionTimeout |
LoginTimeout |
Derselbe Verbindungs-Timeout, umbenannt. Der Standardwert ist 0 (kein Timeout). |
VpcEndpointUrl |
vpc_endpoint_url |
|
SSLCertPath |
TrustStore oder CaFile |
Pfad zu einem CA-Zertifikat, das zur Überprüfung des Servers verwendet wird. Stellen Sie dies unter Windows im Feld Trust Store des DSN-Setup-Dialogfelds ein. Das Dialogfeld hat kein CaFile Feld. Wenn beide gesetzt sind, hat dies TrustStore Priorität. |
Die folgenden 1.x-Optionen werden im aktuellen 2.x-Treiber nicht unterstützt. Der 2.x-Treiber ignoriert sie, sodass sie Ihre Verbindung nicht beeinträchtigen. Sie aus Ihrem DSN zu entfernen ist optional, wird aber empfohlen, um Verwirrung zu vermeiden.
-
SingleRowMode— um den Client-Speicher zu begrenzen, verwenden SieStreamingCursorRowsstattdessen. -
UseSystemTrustStore— nicht unterstützt. Unter Windows konnte der 1.x-Treiber das Serverzertifikat anhand des Windows-Systemzertifikatsspeichers validieren. Der 2.x-Treiber validiert anhand einer CA-Zertifikatsdatei: Er verwendet standardmäßig das mitgelieferte Amazon Redshift Redshift-Stammzertifikat oder die Datei, die Sie in oder angeben.TrustStoreCaFile -
BoolsAsChar— Wenn Ihre Anwendung darauf angewiesen war, dass BOOLEAN-Spalten als"0"und"1"strings (SQL_VARCHAR) zurückgegeben wurden, wandeln Sie die Spalte beispielsweiseVARCHARin Ihrer Abfrage um.SELECT col::VARCHAR FROM ... -
TextAsLongVarchar,CheckCertRevocation,EnableAwsSdkLogs,UseLogPrefix,,Locale,UseDeclareFetchUseMultipleStatementsEnforceSingleStatement,EnableTableTypes— kein Äquivalent in der aktuellen Version. Das Amazon Redshift Redshift-Team prüft derzeit Äquivalente oder Alternativen für diese Optionen in future Versionen.
Die vollständige Liste der unterstützten 2.x-Optionen finden Sie unter. ODBC-Treiberoptionen
Änderungen des Datentyps
Die folgende Tabelle zeigt Amazon Redshift Redshift-Datentypzuordnungen, die in ODBC 2.x geändert wurden, um der ODBC-Spezifikation zu entsprechen. Die meisten Anwendungen sind davon nicht betroffen, da sie Spalten eher nach Index oder Namen als nach Typcode binden.
| Amazon-Redshift-Datentyp | ODBC 1.x | ODBC 2.x |
|---|---|---|
DOUBLE PRECISION |
SQL_FLOAT(6) |
SQL_DOUBLE (8) |
INTERVAL YEAR TO MONTH |
SQL_VARCHAR(12), Text |
SQL_INTERVAL_YEAR_TO_MONTH(107), Intervallstruktur |
INTERVAL DAY TO SECOND |
SQL_VARCHAR(12), Text |
SQL_INTERVAL_DAY_TO_SECOND(110), Intervallstruktur |
VARCHAR / CHAR /
TEXT |
Breite Typen (SQL_WVARCHAR,SQL_WCHAR,SQL_WLONGVARCHAR); Standard UseUnicode=true |
Schmale Typen (SQL_VARCHAR,SQL_CHAR,SQL_LONGVARCHAR). Legt festUseUnicode=true, dass breite Typen wiederhergestellt werden. |
GEOMETRY/GEOGRAPHY(alsSQL_C_BINARY) |
Hex-encoded ASCII-Zeichenfolge | Unformatierte Binärbytes |
Die von zurückgegebenen COLUMN_SIZE Werte haben sich SQLColumns auch für die SUPER Datentypen GEOMETRYGEOGRAPHY, und geändert. Diese geben nun NULL zurück, um Spalten ohne Größe gemäß der ODBC-Spezifikation anzuzeigen. Anwendungen, die Puffer auf der Grundlage von NULL zuweisen, COLUMN_SIZE müssen mit NULL umgehen, indem sie eine Standardpuffergröße verwenden.
Post-migration Problembehandlung
In der folgenden Tabelle werden häufig auftretende Probleme beschrieben, die nach der Migration auftreten können, und deren Behebung.
| Symptom | Ursache | Vorgehensweise |
|---|---|---|
| Externe Tabellen sind im Schemabrowser nicht sichtbar | Spectrum- und Datashare-Tabellen werden gemeldet als EXTERNAL
TABLE |
In den EXTERNAL TABLE SQLTables Typfilter einbeziehen. |
| Pyodbc-Fehler in Intervallspalten | pyodbc unterstützt keine ODBC-Intervalltypen | Wandelt Intervalle in Abfragen um. VARCHAR |
| Zeichendaten werden als unerwartete Zeichen angezeigt (Mojibake) | UseUnicodeDie Standardeinstellung wurde auf geändert. false Anwendungen, die Daten mit breiten Zeichen (UTF-16) erwarten, interpretieren Bytes mit schmalen Zeichen möglicherweise falsch als breite Paare, was zu einer verstümmelten Ausgabe führt. Die Daten selbst sind unverändert. |
Legen Sie UseUnicode=true in Ihrem DSN fest, oder aktualisieren Sie Ihre Anwendung so, dass Spalten wie SQL_C_CHAR anstelle von SQL_C_WCHAR gebunden werden. |
| Long-running Abfragen geben Timeout-Fehler zurück | SQL_ATTR_QUERY_TIMEOUTist jetzt erzwungen. ODBC 1.x hat diese Einstellung stillschweigend ignoriert. |
Erhöhen oder entfernen Sie es QueryTimeout aus Ihrem DSN oder setzen Sie es in Ihrer Anwendung SQL_ATTR_QUERY_TIMEOUT auf 0. |
Die Einstellung kehrt zurück SQL_ATTR_CURRENT_CATALOG HY011 |
Das Attribut kann nicht für eine offene Verbindung festgelegt werden. Das Wechseln von Datenbanken bei einer offenen Verbindung wird nicht unterstützt. | Legen Sie das Attribut fest, bevor Sie eine Verbindung herstellen, oder schließen Sie die Verbindung zur Zieldatenbank und öffnen Sie sie erneut. |
| In Dual-Stack-Umgebungen hängt die Verbindung | Einschränkung in Versionen <= 2.1.16 | Führen Sie ein Upgrade auf 2.1.17 oder höher durch. |
| Das Analysieren von Fehlermeldungen liefert unerwartete Ergebnisse | Nachrichtenformat geändert; SQLSTATE-Codes unverändert | Analysiert SQLSTATE-Codes anstelle von Nachrichtentext. |
| Data-at-execution Die Parameterbindung verhält sich anders | SQL_NEED_LONG_DATA_LENwurde von FALSE auf TRUE geändert; Anwendungen, die dies verwenden, SQL_DATA_AT_EXEC müssen jetzt die Gesamtdatenlänge im Voraus angeben |
Geben Sie StrLen_or_IndPtr beim Binden von SQL_DATA_AT_EXEC Parametern den Längenwert ein. |
| Treiberprotokolle werden nicht generiert | LogLevelund LogPath muss sich im [ODBC] globalen Bereich von befindenodbc.ini, nicht in einzelnen DSN-Abschnitten |
Verschieben Sie die Protokollierungseinstellungen von Ihrem DSN in den [ODBC] Abschnitt. |
Aktualisierung von einer älteren ODBC 2.x-Version
Wenn Sie bereits eine ältere ODBC 2.x-Version verwenden, führen Sie ein Upgrade auf die neueste Version durch. Eine vollständige Liste der Verbesserungen und Bugfixes für alle Versionen finden Sie in der Anmeldung zur Änderung des Amazon Redshift ODBC-Treibers