Spark SQL - convertir cadena a ASCII

tenemos un problema de uno de los productores empujando algunas cadenas Unicode a un campo que debe ser ASCII. Actualmente el trabajo es configurable pura-sql por lo tanto me gustaría saber si es posible convertir cadena Unicode a ASCII usando sólo Spark SQL, algo similar a la solución dada en esto pregunta (por supuesto que esto dará lugar a la posible pérdida de datos para caracteres no soportados, pero esto no es una preocupación).

Pregunta hecha hace 3 años, 5 meses, 0 días - Por codergeek24


4 Respuestas:

  • Prueba. encode:

    SELECT encode(column, 'ascii') as column;
    

    por ejemplo:

    spark-sql> select encode('ÄÊÍABCDE', 'ascii');
    ???ABCDE
    

    Respondida el Dec 16, 2020 a las 09:46 - por codecrusader

    Votos positivos: 0 | Votos negativos: 0

  • Puede eliminar los charcos no deseados usando el regexp_replace()

    scala> spark.sql(""" SELECT regexp_replace(decode(encode('Ä??ABCDE', 'utf-8'), 'ascii'), "[^\t\n\r\x20-\x7F]","")  x """).show(false)
    +-----+
    |x    |
    +-----+
    |ABCDE|
    +-----+
    
    
    scala>
    

    Respondida el Dec 16, 2020 a las 09:51 - por algorithmalchemist

    Votos positivos: 0 | Votos negativos: 0

  • En Spark SQL, no hay una función nativa para convertir directamente una cadena Unicode a ASCII como en SQL Server. Sin embargo, puedes lograrlo utilizando la función translate de Spark SQL para reemplazar los caracteres Unicode no deseados por un valor ASCII específico.

    Aquí tienes un ejemplo de cómo podrías lograr esto en Spark SQL:

    sql
    SELECT 
      text,
      translate(text, '¿¡áÁéÉíÍóÓúÚñÑ', '     aAeEiIoOuUnN') AS text_ascii
    FROM 
      tu_tabla;
    

    En este ejemplo, hemos utilizado la función translate para reemplazar los caracteres Unicode específicos (en el segundo parámetro) por caracteres ASCII (en el tercer parámetro) en la columna text. Puedes ajustar los caracteres Unicode y sus correspondientes valores ASCII según tus necesidades.

    Recuerda que este enfoque puede resultar en la pérdida de datos para algunos caracteres no soportados, por lo que es importante tenerlo en cuenta al realizar la conversión.

    Respondida el Dec 17, 2020 a las 09:46 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Conversión de una cadena a un valor ASCII utilizando Spark SQL

    Para convertir una cadena a un valor ASCII utilizando Spark SQL, puedes utilizar la función initcap(). Esta función convierte el primer carácter de una cadena a mayúsculas y el resto de los caracteres a minúsculas. Sin embargo, también puedes utilizarla para convertir una cadena a un valor ASCII eliminando todos los caracteres que no sean ASCII.

    Aquí tienes un ejemplo:

    sql
    SELECT initcap(REPLACE(my_string, '[^[:ascii:]]', '')) AS ascii_string
    FROM my_table;
    

    Esta consulta reemplazará todos los caracteres que no sean ASCII en la columna my_string por una cadena vacía y luego convertirá el primer carácter de la cadena resultante a mayúsculas y el resto a minúsculas. El resultado será una cadena que contiene solo caracteres ASCII.

    Consideraciones

    La función initcap() no está garantizada que funcione con todos los caracteres no ASCII. Es posible que algunos caracteres se conviertan incorrectamente o se eliminen por completo. La conversión de una cadena a ASCII puede provocar la pérdida de datos, ya que los caracteres no ASCII se eliminarán. * Es importante tener en cuenta que existen otras funciones en Spark SQL que pueden ser más adecuadas para la manipulación de cadenas, como lower(), upper() y regexp_replace().

    Respondida el Dec 17, 2020 a las 09:46 - por Gemini

    Votos positivos: 0 | Votos negativos: 0