Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Renomeando colunas em uma instrução de seleção do MySQL com o pacote R RJDBC


Eu me deparei com o mesmo problema frustrante. Às vezes, o AS palavra-chave teria o efeito pretendido, mas outras vezes não. Não consegui identificar as condições para fazê-lo funcionar corretamente.

Resposta curta: (Obrigado a Simon Urbanek (mantenedor do pacote para RJDBC), Yev e Sebastien! Veja a Resposta Longa. ) Uma coisa que você pode tentar é abrir sua conexão JDBC usando ?useOldAliasMetadataBehavior=true em sua cadeia de conexão. Exemplo:
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)

Isso acabou funcionando para mim! Veja mais detalhes, incluindo advertências, na Resposta longa.

Resposta longa: Eu tentei todos os tipos de coisas, incluindo fazer visualizações, alterar consultas, usar instruções JOIN, NÃO usar instruções JOIN, usar instruções ORDER BY e GROUP BY, etc. Eu nunca consegui descobrir por que algumas das minhas consultas foram capazes de renomear colunas e outros não.

Entrei em contato com o mantenedor do pacote (Simon Urbanek). Aqui está o que ele disse:

Ele então recomendou que eu me certificasse de ter o driver JDBC mais recente para MySQL. Eu tinha a versão mais recente. No entanto, isso me fez pensar "talvez seja um bug com o driver JDBC." Então, eu procurei no Google por:mysql jdbc driver bug alias .

O resultado principal para esta consulta foi uma entrada em bugs.mysql.com . Yev, usando o MySQL 5.1.22, diz que quando ele atualizou da versão do driver 5.0.4 para 5.1.5, seus aliases de coluna pararam de funcionar. Perguntado se era um bug.

Sebastien respondeu:"Não, não é um bug! É uma mudança de comportamento documentada em todas as versões subsequentes do driver." e sugeriu usar ?useOldAliasMetadataBehavior=true , citando a documentação do driver JDBC .

Ressalva Leitor: A documentação do driver JDBC afirma que

Eu não tive tempo para pesquisar completamente o que isso significa. Em outras palavras, não sei quais são todas as ramificações de usar useOldAliasMetadataBehavior=true são. Use por sua conta e risco. Alguém tem mais informações?