Vida Ha created SQOOP-585:
-----------------------------
Summary: Bug when sqoop a join of two tables with the same column
name with mysql backend
Key: SQOOP-585
URL: https://issues.apache.org/jira/browse/SQOOP-585
Project: Sqoop
Issue Type: Bug
Components: connectors/sqlserver
Affects Versions: 1.4.3
Environment: - Mysql server backend (Postgres is fine)
- using a --query argument to join over two tables with identical column names.
Here is an example of my sqoop command:
JAVA_HOME=/usr ./bin/sqoop import \
--query 'SELECT events.*, square_applications.name as square_application,
user_agents.name as user_agent from events LEFT JOIN square_applications on
events.square_application_id=square_applications.id LEFT JOIN user_agents on
events.user_agent_id=user_agents.id where $CONDITIONS' \
--boundary-query "SELECT MIN(id), MAX(id) from events"\
--split-by events.id \
--target-dir /tmp/sqoop/events \
--connect jdbc:mysql://localhost/development_database
Reporter: Vida Ha
Priority: Minor
I get this error when I run the command:
INFO: Executing SQL statement: SELECT events.*, square_applications.name as
square_application, user_agents.name as user_agent from events LEFT JOIN
square_applications on events.square_application_id=square_applications.id LEFT
JOIN user_agents on events.user_agent_id=user_agents.id where (1 = 0)
Aug 23, 2012 10:10:56 AM org.apache.sqoop.tool.ImportTool run
SEVERE: Imported Failed: Duplicate Column identifier specified: 'name'
Calling "getColumnLabel" instead of "getColumnName" in SqlManager.java fixes
this problem and this still works in postgres as well as mysql. Here is my
patch:
Index: src/java/org/apache/sqoop/manager/SqlManager.java
===================================================================
--- src/java/org/apache/sqoop/manager/SqlManager.java (revision 1375124)
+++ src/java/org/apache/sqoop/manager/SqlManager.java (working copy)
@@ -135,9 +135,9 @@
ArrayList<String> columns = new ArrayList<String>();
ResultSetMetaData metadata = results.getMetaData();
for (int i = 1; i < cols + 1; i++) {
- String colName = metadata.getColumnName(i);
+ String colName = metadata.getColumnLabel(i);
if (colName == null || colName.equals("")) {
- colName = metadata.getColumnLabel(i);
+ colName = metadata.getColumnName(i);
if (null == colName) {
colName = "_RESULT_" + i;
}
@@ -208,9 +208,9 @@
typeId = Types.BIGINT;
}
- String colName = metadata.getColumnName(i);
+ String colName = metadata.getColumnLabel(i);
if (colName == null || colName.equals("")) {
- colName = metadata.getColumnLabel(i);
+ colName = metadata.getColumnName(i);
}
colTypes.put(colName, Integer.valueOf(typeId));
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira