View a markdown version of this page

Différences entre les versions 2.x et 1.x du pilote ODBC - Amazon Redshift

Amazon Redshift ne prendra plus en charge la création de nouveaux UDFs Python à partir du patch 198. Les fonctions Python définies par l’utilisateur existantes continueront de fonctionner normalement jusqu’au 30 juin 2026. Pour plus d’informations, consultez le billet de blog .

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Différences entre les versions 2.x et 1.x du pilote ODBC

Cette section décrit les différences entre le pilote ODBC 1.x et le pilote ODBC 2.x, et fournit des conseils sur la façon de migrer vers le pilote 2.x. Il décrit les modifications susceptibles d'affecter votre application et la manière d'y remédier.

Principales différences à corriger

Les actions suivantes permettent de résoudre les problèmes de migration les plus courants. La plupart des applications n'ont besoin que d'un sous-ensemble de ces éléments.

DSN et chaîne de connexion

  • Vérifiez dans votre DSN les options de pilote susceptibles d'avoir été supprimées ou renommées. Certaines options du pilote ODBC 1.x ne sont pas prises en charge dans le pilote ODBC 2.x. D'autres ont été renommés. Consultez Chaîne de connexion et options DSN pour plus de détails.

  • Définissez UseUnicode=true si votre application dépend des codes de type à caractères larges (SQL_WVARCHAR,SQL_WCHAR). Dans le pilote ODBC 2.x, la UseUnicode valeur par défaut estfalse, qui indique les types de caractères restreints.

  • Déplacez les paramètres de journalisation vers la [ODBC] section. Sur Linux et macOS, LogPath il doit être défini dans la [ODBC] section globale deodbc.ini, LogLevel et non dans une section DSN individuelle.

Requête et schéma

  • Inclure EXTERNAL TABLE dans les filtres SQLTables de type. Dans ODBC 2.x, les tables Amazon Redshift Spectrum et les tables de partage de données sont signalées sous la forme. EXTERNAL TABLE Si vous filtrez SQLTables par type, EXTERNAL TABLE ajoutez-en pour continuer à voir ces objets.

  • INTERVALTransférez vers VARCHAR les applications qui ne prennent pas en charge le type de données d'intervalle. Certains clients ne prennent pas en charge les types d'intervalles ODBC. Pour ces clients, insérez la colonne dans votre requête : SELECT col::VARCHAR FROM ...

Code d'application

  • Vérifiez les paramètres de délai d'expiration des requêtes. ODBC 2.x s'applique correctement SQL_ATTR_QUERY_TIMEOUT conformément à la spécification ODBC. ODBC 1.x a ignoré ce paramètre en silence. Long-running les requêtes qui réussissaient auparavant peuvent désormais échouer avec une erreur de délai d'attente. Vérifiez et ajustez les valeurs de vos délais d'attente selon vos besoins.

  • Indiquez la longueur des données pour les paramètres de données lors de l'exécution. 2.x est signalé SQL_NEED_LONG_DATA_LEN comme Y (1.x signaléN). Les applications qui lient SQL_DATA_AT_EXEC des paramètres doivent désormais fournir la longueur totale des données dès le départStrLen_or_IndPtr.

Chaîne de connexion et options DSN

Le tableau suivant présente les options du pilote ODBC 1.x qui ont été renommées ou ont des équivalents directs dans le pilote ODBC 2.x.

Option 1.x équivalent 2.x Remarques
MaxLongVarChar MaxLongVarcharSize La valeur par défaut est passée de 8190 à 65535.
ConnectionTimeout LoginTimeout Même délai de connexion, renommé. La valeur par défaut est 0 (aucun délai d'attente).
VpcEndpointUrl vpc_endpoint_url
SSLCertPath TrustStore ou CaFile Chemin d'accès au certificat CA utilisé pour vérifier le serveur. Sous Windows, définissez-le dans le champ Trust Store de la boîte de dialogue de configuration DSN ; la boîte de dialogue ne contient aucun CaFile champ. Si les deux sont définis, TrustStore prend la priorité.

Les options 1.x suivantes ne sont pas prises en charge dans le pilote 2.x actuel. Le pilote 2.x les ignore, de sorte qu'ils n'affectent pas votre connexion. Leur suppression de votre DSN est facultative mais recommandée pour éviter toute confusion.

  • SingleRowMode— pour limiter la mémoire du client, utilisez StreamingCursorRows plutôt.

  • UseSystemTrustStore— non pris en charge. Sous Windows, le pilote 1.x pouvait valider le certificat du serveur par rapport au magasin de certificats du système Windows. Le pilote 2.x valide par rapport à un fichier de certificat CA : il utilise le certificat racine Amazon Redshift fourni par défaut, ou le fichier que vous spécifiez dans ou. TrustStore CaFile

  • BoolsAsChar— si votre application reposait sur des colonnes BOOLEAN renvoyées sous forme "0" de "1" chaînes (SQL_VARCHAR), convertissez la colonne en colonne VARCHAR dans votre requête, par exemple. SELECT col::VARCHAR FROM ...

  • TextAsLongVarchar,CheckCertRevocation,EnableAwsSdkLogs,UseLogPrefix,Locale,UseDeclareFetch,UseMultipleStatements,EnforceSingleStatement,, EnableTableTypes — aucun équivalent dans la version actuelle. L'équipe Amazon Redshift est en train d'évaluer des équivalents ou des alternatives pour ces options dans les futures versions.

Pour obtenir la liste complète des options 2.x prises en charge, consultezOptions du pilote ODBC.

Changements de type de données

Le tableau suivant présente les mappages de types de données Amazon Redshift qui ont été modifiés dans ODBC 2.x pour se conformer à la spécification ODBC. La plupart des applications ne sont pas affectées car elles lient les colonnes par index ou par nom plutôt que par code de type.

Type de données Amazon Redshift ODBC 1.x ODBC 2.x
DOUBLE PRECISION SQL_FLOAT(6) SQL_DOUBLE (8)
INTERVAL YEAR TO MONTH SQL_VARCHAR(12), texte SQL_INTERVAL_YEAR_TO_MONTH(107), structure d'intervalle
INTERVAL DAY TO SECOND SQL_VARCHAR(12), texte SQL_INTERVAL_DAY_TO_SECOND(110), structure d'intervalle
VARCHAR / CHAR / TEXT Types larges (SQL_WVARCHAR,SQL_WCHAR,SQL_WLONGVARCHAR) ; par défaut UseUnicode=true Types étroits (SQL_VARCHAR,SQL_CHAR,SQL_LONGVARCHAR). UseUnicode=trueParamétré pour restaurer les types larges.
GEOMETRY/GEOGRAPHY(commeSQL_C_BINARY) Hex-encoded Chaîne ASCII Octets binaires bruts

Les COLUMN_SIZE valeurs renvoyées par ont SQLColumns également changé pour GEOMETRYGEOGRAPHY, et les types de SUPER données, qui renvoient désormais NULL pour indiquer les colonnes non dimensionnées conformément à la spécification ODBC. Les applications qui allouent des tampons en fonction de la valeur NULL COLUMN_SIZE doivent gérer la valeur NULL en utilisant une taille de tampon par défaut.

Post-migration résolution des problèmes

Le tableau suivant décrit les problèmes courants que vous pouvez rencontrer après la migration et explique comment les résoudre.

Symptôme Cause Que faire
Les tables externes ne sont pas visibles dans le navigateur de schémas Les tables de spectre et de partage de données sont présentées sous la forme EXTERNAL TABLE Inclure EXTERNAL TABLE dans le filtre SQLTables de type.
erreurs pyodbc sur les colonnes d'intervalle pyodbc ne supporte pas les types d'intervalles ODBC Convertissez les intervalles VARCHAR en requêtes in.
Les données des personnages s'affichent sous forme de caractères inattendus (mojibake) UseUnicodevaleur par défaut modifiée enfalse. Les applications qui attendent des données à caractères larges (UTF-16) peuvent mal interpréter les octets contenant des caractères étroits comme des paires larges, ce qui produit un résultat déformé. Les données elles-mêmes restent inchangées. Définissez UseUnicode=true votre DSN ou mettez à jour votre application pour lier les colonnes au SQL_C_CHAR lieu deSQL_C_WCHAR.
Long-running les requêtes renvoient des erreurs de délai d'expiration SQL_ATTR_QUERY_TIMEOUTest désormais en vigueur. ODBC 1.x a ignoré ce paramètre en silence. Augmentez ou supprimez QueryTimeout de votre DSN, ou réglez-le SQL_ATTR_QUERY_TIMEOUT sur 0 dans votre application.
Paramétrer SQL_ATTR_CURRENT_CATALOG les retours HY011 L'attribut ne peut pas être défini sur une connexion ouverte. Le changement de base de données sur une connexion ouverte n'est pas pris en charge. Définissez l'attribut avant de vous connecter, ou fermez et rouvrez la connexion sur la base de données cible.
La connexion se bloque dans les environnements à double pile Limitation dans les versions <= 2.1.16 Passez à la version 2.1.17 ou ultérieure.
L'analyse des messages d'erreur renvoie des résultats inattendus Format du message modifié ; codes SQLSTATE inchangés Analysez les codes SQLSTATE au lieu du texte du message.
Data-at-execution la liaison de paramètres se comporte différemment SQL_NEED_LONG_DATA_LENpassé de FAUX à VRAI ; les applications qui l'utilisent SQL_DATA_AT_EXEC doivent désormais fournir la longueur totale des données à l'avance Définissez la valeur de longueur StrLen_or_IndPtr lors de la liaison SQL_DATA_AT_EXEC des paramètres.
Les journaux des pilotes ne sont pas générés LogLevelet LogPath doit figurer dans la section [ODBC] globale deodbc.ini, et non dans des sections DSN individuelles Déplacez les paramètres de journalisation de votre DSN vers la [ODBC] section.

Mise à niveau depuis une ancienne version ODBC 2.x

Si vous utilisez déjà une ancienne version ODBC 2.x, passez à la dernière version. Pour obtenir la liste complète des améliorations et des corrections de bogues apportées à toutes les versions, consultez l'enregistrement des modifications apportées au pilote ODBC Amazon Redshift. GitHub

En savoir plus