Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Configure la clasificación por idioma para los resultados de las consultas de Amazon Redshift mediante un Python escalar UDF
Creado por Ethan Stark () AWS
Entorno: producción | Tecnologías: Análisis | AWSservicios: Amazon Redshift |
Resumen
Este patrón proporciona pasos y código de ejemplo para usar un Python escalar UDF (función definida por el usuario) para configurar una clasificación lingüística que no distinga mayúsculas de minúsculas para los resultados de las consultas de Amazon Redshift. Es necesario utilizar un Python escalar UDF porque Amazon Redshift devuelve los resultados en función del orden UTF binario -8 y no admite la ordenación por idiomas específicos. Un Python UDF es un código sin SQL procesamiento que se basa en un programa Python 2.7 y se ejecuta en un almacén de datos. Puede ejecutar UDF código Python con una SQL sentencia en una sola consulta. Para obtener más información, consulte la entrada del blog Introducción a Python UDFs en Amazon Redshift
Los datos de muestra de este patrón se basan en el alfabeto turco con fines de demostración. El Python UDF escalar de este patrón está diseñado para que los resultados de las consultas predeterminados de Amazon Redshift se ajusten al orden lingüístico de los caracteres del idioma turco. Para obtener más información, consulte Ejemplo de lengua turca en la sección Información adicional de este patrón. Puede modificar el Python escalar UDF en este patrón para otros lenguajes.
Requisitos previos y limitaciones
Requisitos previos
Clúster de Amazon Redshift con base de datos, esquema y tablas
Usuario de Amazon Redshift con CREATE TABLE permisos y permisos CREATE FUNCTION
Python 2.7
o posterior
Limitaciones
La clasificación lingüística utilizada por las consultas en este patrón no distingue entre mayúsculas y minúsculas.
Arquitectura
Pila de tecnología
Amazon Redshift
Python UDF
Herramientas
AWSservicios
Amazon Redshift es un servicio de almacenamiento de datos gestionado a escala de petabytes en la nube. AWS Amazon Redshift está integrado en el lago de datos, lo que permite usar los datos para adquirir nueva información para su empresa y sus clientes.
Otras herramientas
Las funciones definidas por el usuario de Python (UDFs)
son funciones que se pueden escribir en Python y, a continuación, invocar SQL sentencias.
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree una tabla para los datos de su muestra. | Para crear una tabla en Amazon Redshift e insertar los datos de muestra en la tabla, utilice las siguientes instrucciones: SQL
Nota: Los primeros nombres de los datos de muestra incluyen caracteres especiales del alfabeto turco. Para obtener más información sobre las consideraciones relativas al idioma turco en este ejemplo, consulte Ejemplo de lengua turca en la sección Información adicional de este patrón. | Ingeniero de datos |
Compruebe la clasificación predeterminada de los datos de la muestra. | Para ver la clasificación predeterminada de los datos de muestra en Amazon Redshift, ejecute la siguiente consulta:
La consulta devuelve la lista de nombres de la tabla que creó anteriormente:
Los resultados de la consulta no están en el orden correcto porque el orden binario UTF -8 predeterminado no se adapta al orden lingüístico de los caracteres especiales turcos. | Ingeniero de datos |
Crea un Python UDF escalar. | Para crear un Python escalarUDF, usa el siguiente SQL código:
| Ingeniero de datos |
Consulta del ejemplo de datos. | Para consultar los datos de ejemplo mediante PythonUDF, ejecute la siguiente SQL consulta:
La consulta ahora devuelve los datos de la muestra en orden lingüístico turco:
| Ingeniero de datos |
Recursos relacionados
ORDERCláusula BY (documentación de Amazon Redshift)
Creación de un Python escalar UDF (documentación de Amazon Redshift)
Información adicional
Ejemplo de idioma turco
Amazon Redshift devuelve los resultados de las consultas en función del orden binario UTF -8, no de un orden de clasificación específico del idioma. Esto significa que si consulta una tabla de Amazon Redshift que contenga caracteres turcos, los resultados de la consulta no se ordenarán según el orden lingüístico del idioma turco. El idioma turco contiene seis caracteres especiales (ç, ı, ğ, ö, ş y ü) que no aparecen en el alfabeto latino. Estos caracteres especiales se colocan al final de un conjunto de resultados ordenados según el orden binario UTF -8, como se muestra en la siguiente tabla.
Orden binario UTF -8 | Ordenamiento lingüístico turco |
a | a |
b | b |
c | c |
d | ç (*) |
e | d |
f | e |
g | f |
h | g |
i | ğ (*) |
j | h |
k | ı (*) |
l | i |
m | j |
n | k |
o | l |
p | m |
r | n |
s | o |
t | ö (*) |
u | p |
v | r |
y | s |
z | ş (*) |
ç (*) | t |
ğ (*) | u |
ı (*) | ü (*) |
ö (*) | v |
ş (*) | y |
ü (*) | z |
Nota: El asterisco (*) indica un carácter especial en el idioma turco.
Como se muestra en la tabla anterior, el carácter especial ç se encuentra entre c y d en el orden lingüístico turco, pero aparece después de z en el orden binario UTF -8. El Python UDF escalar de este patrón usa el siguiente diccionario de reemplazo de caracteres para reemplazar los caracteres especiales turcos por los correspondientes caracteres equivalentes en latín.
Carácter especial turco | Carácter equivalente en latín |
ç | c~ |
ı | h~ |
ğ | g~ |
ö | o~ |
ş | s~ |
ü | u~ |
Nota: Se añade un carácter de tilde (~) al final de los caracteres latinos que sustituyen a sus correspondientes caracteres especiales turcos.
Modificar una función escalar de Python UDF
Para modificar la UDF función escalar de Python a partir de este patrón para que la función acepte un parámetro de localización y admita un diccionario de transacciones múltiples, utilice el siguiente SQL código:
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;
El siguiente código de ejemplo muestra cómo consultar el Python modificadoUDF:
SELECT first_name FROM my_table ORDER BY collate_order(first_name, 'tr-TR');