Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Configurer un tri spécifique à la langue pour les résultats des requêtes Amazon Redshift à l'aide d'un UDF Python scalaire - Recommandations AWS

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.

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.

Configurer un tri spécifique à la langue pour les résultats des requêtes Amazon Redshift à l'aide d'un UDF Python scalaire

Créée par Ethan Stark (AWS)

Récapitulatif

Ce modèle fournit des étapes et un exemple de code pour utiliser une UDF (fonction définie par l'utilisateur) Python scalaire afin de configurer un tri linguistique insensible aux majuscules et minuscules pour les résultats des requêtes Amazon Redshift. Il est nécessaire d'utiliser un UDF Python scalaire car Amazon Redshift renvoie des résultats basés sur l'ordre binaire UTF-8 et ne prend pas en charge le tri spécifique à une langue. Un UDF Python est un code de traitement non SQL basé sur un programme Python 2.7 et exécuté dans un entrepôt de données. Vous pouvez exécuter du code UDF Python avec une instruction SQL dans une seule requête. Pour plus d'informations, consultez le billet de blog consacré à l'introduction à Python UDFs dans Amazon Redshift AWS Big Data.

Les données d'échantillon de ce modèle sont basées sur l'alphabet turc à des fins de démonstration. Le scalaire Python UDF utilisé dans ce modèle est conçu pour que les résultats de requête par défaut d'Amazon Redshift soient conformes à l'ordre linguistique des caractères en turc. Pour plus d'informations, voir l'exemple de langue turque dans la section Informations supplémentaires de ce modèle. Vous pouvez modifier l'UDF Python scalaire dans ce modèle pour d'autres langages.

Conditions préalables et limitations

Prérequis

  • Cluster Amazon Redshift avec base de données, schéma et tables

  • Utilisateur Amazon Redshift avec autorisations CREATE TABLE et CREATE FUNCTION

  • Python 2.7 ou version ultérieure

Limites

Le tri linguistique utilisé par les requêtes dans ce modèle ne fait pas la distinction majuscules/minuscules.

Architecture

Pile technologique

  • Amazon Redshift

  • UDF en Python

Outils

Services AWS

  • Amazon Redshift est un service d'entrepôt de données géré à l'échelle du pétaoctet dans le cloud AWS. Amazon Redshift est intégré à votre lac de données, ce qui vous permet d'utiliser vos données pour acquérir de nouvelles informations pour votre entreprise et vos clients.

Autres outils

Épopées

TâcheDescriptionCompétences requises

Créez un tableau pour vos exemples de données.

Pour créer une table dans Amazon Redshift et y insérer vos exemples de données, utilisez les instructions SQL suivantes :

CREATE TABLE my_table (first_name varchar(30)); INSERT INTO my_table (first_name) VALUES ('ali'), ('Ali'), ('ırmak'), ('IRMAK'), ('irem'), ('İREM'), ('oğuz'), ('OĞUZ'), ('ömer'), ('ÖMER'), ('sedat'), ('SEDAT'), ('şule'),
Note

Les prénoms figurant dans les échantillons de données incluent des caractères spéciaux de l'alphabet turc. Pour plus d'informations sur les considérations relatives à la langue turque pour cet exemple, voir l'exemple de langue turque dans la section Informations supplémentaires de ce modèle.

Ingénieur de données

Vérifiez le tri par défaut des échantillons de données.

Pour voir le tri par défaut de vos exemples de données dans Amazon Redshift, exécutez la requête suivante :

SELECT first_name FROM my_table ORDER BY first_name;

La requête renvoie la liste des prénoms de la table que vous avez créée précédemment :

first_name --------------- Ali IRMAK OĞUZ SEDAT ali irem oğuz sedat ÖMER ömer İREM ırmak ŞULE şule

Les résultats de la requête ne sont pas dans le bon ordre car l'ordre binaire UTF-8 par défaut ne correspond pas à l'ordre linguistique des caractères spéciaux turcs.

Ingénieur de données

Créez un UDF Python scalaire.

Pour créer un UDF Python scalaire, utilisez le code SQL suivant : 

CREATE OR REPLACE FUNCTION collate_sort (value varchar) RETURNS varchar IMMUTABLE AS $$ def sort_str(val): import string dictionary = { 'I': 'ı', 'ı': 'h~', 'İ': 'i', 'Ş': 's~', 'ş': 's~', 'Ğ': 'g~', 'ğ': 'g~', 'Ü': 'u~', 'ü': 'u~', 'Ö': 'o~', 'ö': 'o~', 'Ç': 'c~', 'ç': 'c~' } for key, value in dictionary.items(): val = val.replace(key, value) return val.lower() return sort_str(value) $$ LANGUAGE plpythonu;
Ingénieur de données

Interrogez les exemples de données.

Pour interroger les exemples de données à l'aide de l'UDF Python, exécutez la requête SQL suivante :

SELECT first_name FROM my_table ORDER BY collate_order(first_name);

La requête renvoie désormais les exemples de données dans l'ordre linguistique turc :

first_name --------------- ali Ali ırmak IRMAK irem İREM oğuz OĞUZ ömer Ömer sedat SEDAT şule ŞULE
Ingénieur de données

Développez du code pour trier les résultats des requêtes par ordre linguistique

TâcheDescriptionCompétences requises

Créez un tableau pour vos exemples de données.

Pour créer une table dans Amazon Redshift et y insérer vos exemples de données, utilisez les instructions SQL suivantes :

CREATE TABLE my_table (first_name varchar(30)); INSERT INTO my_table (first_name) VALUES ('ali'), ('Ali'), ('ırmak'), ('IRMAK'), ('irem'), ('İREM'), ('oğuz'), ('OĞUZ'), ('ömer'), ('ÖMER'), ('sedat'), ('SEDAT'), ('şule'),
Note

Les prénoms figurant dans les échantillons de données incluent des caractères spéciaux de l'alphabet turc. Pour plus d'informations sur les considérations relatives à la langue turque pour cet exemple, voir l'exemple de langue turque dans la section Informations supplémentaires de ce modèle.

Ingénieur de données

Vérifiez le tri par défaut des échantillons de données.

Pour voir le tri par défaut de vos exemples de données dans Amazon Redshift, exécutez la requête suivante :

SELECT first_name FROM my_table ORDER BY first_name;

La requête renvoie la liste des prénoms de la table que vous avez créée précédemment :

first_name --------------- Ali IRMAK OĞUZ SEDAT ali irem oğuz sedat ÖMER ömer İREM ırmak ŞULE şule

Les résultats de la requête ne sont pas dans le bon ordre car l'ordre binaire UTF-8 par défaut ne correspond pas à l'ordre linguistique des caractères spéciaux turcs.

Ingénieur de données

Créez un UDF Python scalaire.

Pour créer un UDF Python scalaire, utilisez le code SQL suivant : 

CREATE OR REPLACE FUNCTION collate_sort (value varchar) RETURNS varchar IMMUTABLE AS $$ def sort_str(val): import string dictionary = { 'I': 'ı', 'ı': 'h~', 'İ': 'i', 'Ş': 's~', 'ş': 's~', 'Ğ': 'g~', 'ğ': 'g~', 'Ü': 'u~', 'ü': 'u~', 'Ö': 'o~', 'ö': 'o~', 'Ç': 'c~', 'ç': 'c~' } for key, value in dictionary.items(): val = val.replace(key, value) return val.lower() return sort_str(value) $$ LANGUAGE plpythonu;
Ingénieur de données

Interrogez les exemples de données.

Pour interroger les exemples de données à l'aide de l'UDF Python, exécutez la requête SQL suivante :

SELECT first_name FROM my_table ORDER BY collate_order(first_name);

La requête renvoie désormais les exemples de données dans l'ordre linguistique turc :

first_name --------------- ali Ali ırmak IRMAK irem İREM oğuz OĞUZ ömer Ömer sedat SEDAT şule ŞULE
Ingénieur de données

Ressources connexes

Informations supplémentaires

Exemple de langue turque

Amazon Redshift renvoie les résultats des requêtes sur la base d'un ordre de tri binaire UTF-8, et non d'un ordre de tri spécifique à une langue. Cela signifie que si vous interrogez une table Amazon Redshift contenant des caractères turcs, les résultats de la requête ne sont pas triés selon l'ordre linguistique de la langue turque. La langue turque contient six caractères spéciaux (ç, ı, ğ, ö, ş et ü) qui n'apparaissent pas dans l'alphabet latin. Ces caractères spéciaux sont placés à la fin d'un ensemble de résultats triés en fonction de l'ordre binaire UTF-8, comme le montre le tableau suivant.

Ordre binaire UTF-8

Ordre linguistique turc

a

a

b

b

c

c

d

mois (*)

e

d

f

e

g

f

h

g

i

ğ (*)

j

h

k

Oui (*)

l

i

m

j

n

k

o

l

p

m

r

n

s

o

t

île (*)

u

p

v

r

y

s

z

Oui (*)

mois (*)

t

ğ (*)

u

Oui (*)

ü (*)

île (*)

v

Oui (*)

y

ü (*)

z

Note

L'astérisque (*) indique un caractère spécial dans la langue turque.

Comme l'illustre le tableau ci-dessus, le caractère spécial ç se situe entre c et d dans l'ordre linguistique turc, mais apparaît après z dans l'ordre binaire UTF-8. Dans ce modèle, le scalaire Python UDF utilise le dictionnaire de remplacement de caractères suivant pour remplacer les caractères spéciaux turcs par des caractères équivalents en latin correspondants.

Caractère spécial turc

Caractère équivalent en latin

ç

c~

ı

h~

ğ

g~

ö

o~

ş

s~

ü

u~

Note

Un tilde (~) est ajouté à la fin des caractères latins pour remplacer les caractères spéciaux turcs correspondants.

Modifier une fonction UDF Python scalaire

Pour modifier la fonction UDF scalaire de Python à partir de ce modèle afin qu'elle accepte un paramètre de localisation et prenne en charge un dictionnaire de transactions multiples, utilisez le code SQL suivant :

CREATE OR REPLACE FUNCTION collate_sort (value varchar, locale varchar) RETURNS varchar IMMUTABLE AS $$ def sort_str(val): import string # Turkish Dictionary if locale == 'tr-TR': dictionary = { 'I': 'ı', 'ı': 'h~', 'İ': 'i', 'Ş': 's~', 'ş': 's~', 'Ğ': 'g~', 'ğ': 'g~', 'Ü': 'u~', 'ü': 'u~', 'Ö': 'o~', 'ö': 'o~', 'Ç': 'c~', 'ç': 'c~' } # German Dictionary if locale == 'de-DE': dictionary = { .... .... } for key, value in dictionary.items(): val = val.replace(key, value) return val.lower() return sort_str(value) $$ LANGUAGE plpythonu;

L'exemple de code suivant montre comment interroger l'UDF Python modifié :

SELECT first_name FROM my_table ORDER BY collate_order(first_name, 'tr-TR');
ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.