sql >> Base de Datos >  >> RDS >> Mysql

Cambiar el nombre de las columnas en una declaración de selección de MySQL con el paquete R RJDBC

Me he encontrado con el mismo problema frustrante. A veces el AS palabra clave tendría el efecto deseado, pero otras veces no lo haría. No pude identificar las condiciones para que funcione correctamente.

Respuesta corta: (¡Gracias a Simon Urbanek (mantenedor del paquete para RJDBC), Yev y Sebastien! Consulte la respuesta larga). ) Una cosa que puede intentar es abrir su conexión JDBC usando ?useOldAliasMetadataBehavior=true en su cadena de conexión. Ejemplo:

drv <- JDBC("com.mysql.jdbc.Driver", "C:/JDBC/mysql-connector-java-5.1.18-bin.jar", identifier.quote="`")
conn <- dbConnect(drv, "jdbc:mysql://server/schema?useOldAliasMetadataBehavior=true", "username", "password")
query <- "SELECT `a` AS `b` FROM table"
result <- dbGetQuery(conn, query)
dbDisconnect(conn)

¡Esto terminó funcionando para mí! Consulte más detalles, incluidas las advertencias, en la Respuesta larga.

Respuesta larga: Intenté todo tipo de cosas, incluyendo hacer vistas, cambiar consultas, usar declaraciones JOIN, NO usar declaraciones JOIN, usar declaraciones ORDER BY y GROUP BY, etc. Nunca pude averiguar por qué algunas de mis consultas podían cambiar el nombre de las columnas. y otros no.

Me puse en contacto con el mantenedor del paquete (Simon Urbanek). Esto es lo que dijo:

Luego me recomendó que me asegurara de tener el controlador JDBC más reciente para MySQL. Yo tenía la versión más reciente. Sin embargo, me hizo pensar "tal vez ES un error con el controlador JDBC". Entonces, busqué en Google:mysql jdbc driver bug alias .

El resultado principal de esta consulta fue una entrada en bugs.mysql.com . Yev, usando MySQL 5.1.22, dice que cuando actualizó de la versión del controlador 5.0.4 a la 5.1.5, sus alias de columna dejaron de funcionar. Preguntó si era un error.

Sebastien respondió:"¡No, no es un error! Es un cambio de comportamiento documentado en todas las versiones posteriores del controlador". y sugirió usar ?useOldAliasMetadataBehavior=true , citando documentación para el controlador JDBC .

Advertencia Lector: La documentación del controlador JDBC establece que

No he tenido tiempo de investigar completamente lo que esto significa. En otras palabras, no sé cuáles son todas las ramificaciones de usar useOldAliasMetadataBehavior=true son. Úselo bajo su propio riesgo. ¿Alguien más tiene más información?