es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La consulta de Teradata devuelve caracteres incorrectos en la columna de cadena, pero exportar a CSV desde la consola del asistente funciona.

Estoy utilizando el paquete DBI en R para conectarme a teradata de la siguiente manera:

library(teradatasql)

query <- "
    SELECT sku, description
    FROM sku_table
    WHERE sku = '12345'
    "

dbconn <- DBI::dbConnect(
        teradatasql::TeradataDriver(),
        host = teradataHostName, database = teradataDBName,
        user = teradataUserName, password = teradataPassword
    )

dbFetch(dbSendQuery(dbconn, query), -1)

Devuelve un resultado de la siguiente manera:

  SKU                               DESCRIPCIÓN
12345      18V MAX™ Collated Drywall Screwgun

Observa los caracteres incorrectos arriba. Supuestamente debería ser un superíndice TM para el símbolo de marca registrada.

Cuando utilizo SQL Assistant para ejecutar la consulta y exportar manualmente los resultados a un archivo CSV, funciona correctamente, es decir, la columna DECRIPCIÓN tiene la codificación correcta.

¿Alguna idea de qué está sucediendo y cómo puedo solucionar este problema? Obviamente, no quiero tener un paso manual de exportar a CSV y volver a leer los resultados en un marco de datos de R, y en memoria.

Tags:  

Answer

  1. Avatar for davy.ai

    El problema con los caracteres incorrectos (â×¢) probablemente se debe a la codificación. Es posible que el paquete teradatasql no esté reconociendo correctamente la codificación de los resultados. Para solucionar esto, puedes intentar establecer la codificación al conectarte a Teradata utilizando el parámetro sessionCharacterEncoding, de esta manera:

    dbconn <- DBI::dbConnect(
                teradatasql::TeradataDriver(),
                host = teradataHostName, database = teradataDBName,
                user = teradataUserName, password = teradataPassword,
                sessionCharacterEncoding = "UTF-8" # o la codificación correcta para tus datos
            )
    

    Si esto no funciona, puedes intentar convertir la codificación de los resultados utilizando la función iconv() en R, de esta manera:

    data <- dbFetch(dbSendQuery(dbconn, query), -1)
    
    # convertir la codificación de la columna DESCRIPTION
    data$DESCRIPTION <- iconv(data$DESCRIPTION, from = "UTF-8", to = "ASCII//TRANSLIT")
    
    # imprimir el resultado
    print(data)
    

    Esto debería convertir los caracteres incorrectos en sus correspondientes caracteres ASCII o eliminarlos por completo.

Comments are closed.