Markus Kemper created SQOOP-3038:
------------------------------------
Summary: Sqoop export using --hcatalog with RDBMS reserved word
column name results in "null" value
Key: SQOOP-3038
URL: https://issues.apache.org/jira/browse/SQOOP-3038
Project: Sqoop
Issue Type: Bug
Components: hive-integration
Reporter: Markus Kemper
-----------------------
| c1 | value | <=== RDBMS reserved word "value"
-----------------------
| 1 | (null) | <=== null?
-----------------------
TEST CASE:
STEP 01 - Create MySQL Tables
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"drop table t1"
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"create table t1 (c1 int, c2 varchar(5))"
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"insert into t1 values (1, 'one')"
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"show create table t1"
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"select * from t1"
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"drop table t1_value"
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"create table t1_value (c1 int, \`value\` varchar(5))"
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"insert into t1_value select * from t1"
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"show create table t1_value"
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"select * from t1_value"
Output:
-----------------------------------------------
| Table | Create Table |
-----------------------------------------------
| t1 | CREATE TABLE `t1` (
`c1` int(11) DEFAULT NULL,
`c2` varchar(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
-----------------------------------------------
-----------------------
| c1 | c2 |
-----------------------
| 1 | one |
-----------------------
-----------------------------------------------
| Table | Create Table |
-----------------------------------------------
| t1_value | CREATE TABLE `t1_value` (
`c1` int(11) DEFAULT NULL,
`value` varchar(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
-----------------------------------------------
-----------------------
| c1 | value |
-----------------------
| 1 | one |
-----------------------
STEP 02 - Verify Import/Export Using --target-dir and --export-dir
sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --table t1
--target-dir /user/root/t1 --delete-target-dir --num-mappers 1
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"delete from t1"
sqoop export --connect $MYCONN --username $MYUSER --password $MYPSWD --table t1
--export-dir /user/root/t1 --num-mappers 1
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"select * from t1"
sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --table
t1_value --target-dir /user/root/t1 --delete-target-dir --num-mappers 1
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"delete from t1_value"
sqoop export --connect $MYCONN --username $MYUSER --password $MYPSWD --table
t1_value --export-dir /user/root/t1 --num-mappers 1
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"select * from t1_value"
Output:
-----------------------
| c1 | c2 |
-----------------------
| 1 | one |
-----------------------
-----------------------
| c1 | value |
-----------------------
| 1 | one |
-----------------------
STEP 03 - Verify import with --hive-import and export with --hcatalog
beeline -u jdbc:hive2:// -e "use default; drop table t1;"
sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --table t1
--target-dir /user/root/t1 --delete-target-dir --hive-import --hive-database
default --hive-table t1 --num-mappers 1
beeline -u jdbc:hive2:// -e "use default; select * from t1;"
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"delete from t1"
sqoop export --connect $MYCONN --username $MYUSER --password $MYPSWD --table t1
--hcatalog-database default --hcatalog-table t1 --num-mappers 1
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"select * from t1"
Output:
+--------+--------+--+
| t1.c1 | t1.c2 |
+--------+--------+--+
| 1 | one |
+--------+--------+--+
-----------------------
| c1 | c2 |
-----------------------
| 1 | one |
-----------------------
beeline -u jdbc:hive2:// -e "use default; drop table t1_value;"
sqoop import --connect $MYCONN --username $MYUSER --password $MYPSWD --table
t1_value --target-dir /user/root/t1 --delete-target-dir --hive-import
--hive-database default --hive-table t1_value --num-mappers 1
beeline -u jdbc:hive2:// -e "use default; select * from t1_value;"
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"delete from t1_value"
sqoop export --connect $MYCONN --username $MYUSER --password $MYPSWD --table
t1_value --hcatalog-database default --hcatalog-table t1_value --num-mappers 1
sqoop eval --connect $MYCONN --username $MYUSER --password $MYPSWD --query
"select * from t1_value"
Output:
+--------------+-----------------+--+
| t1_value.c1 | t1_value.value |
+--------------+-----------------+--+
| 1 | one |
+--------------+-----------------+--+
-----------------------
| c1 | value |
-----------------------
| 1 | (null) | <========== null?
-----------------------
beeline -u jdbc:hive2:// -e "use default; show create table t1;"
beeline -u jdbc:hive2:// -e "use default; show create table t1_value;"
Output:
+-------------------------------------------------------------------------------+--+
| createtab_stmt
|
+-------------------------------------------------------------------------------+--+
| CREATE TABLE `t1`(
|
| `c1` int,
|
| `c2` string)
|
| COMMENT 'Imported by sqoop on 2016/10/25 17:16:20'
|
| ROW FORMAT SERDE
|
| 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
|
| WITH SERDEPROPERTIES (
|
| 'field.delim'='\u0001',
|
| 'line.delim'='\n',
|
| 'serialization.format'='\u0001')
|
| STORED AS INPUTFORMAT
|
| 'org.apache.hadoop.mapred.TextInputFormat'
|
| OUTPUTFORMAT
|
| 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
|
| LOCATION
|
| 'hdfs://<hostname>:8020/user/hive/warehouse/t1' |
| TBLPROPERTIES (
|
| 'COLUMN_STATS_ACCURATE'='true',
|
| 'numFiles'='1',
|
| 'totalSize'='6',
|
| 'transient_lastDdlTime'='1477440983')
|
+-------------------------------------------------------------------------------+--+
+-------------------------------------------------------------------------------------+--+
| createtab_stmt
|
+-------------------------------------------------------------------------------------+--+
| CREATE TABLE `t1_value`(
|
| `c1` int,
|
| `value` string)
|
| COMMENT 'Imported by sqoop on 2016/10/25 17:23:02'
|
| ROW FORMAT SERDE
|
| 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
|
| WITH SERDEPROPERTIES (
|
| 'field.delim'='\u0001',
|
| 'line.delim'='\n',
|
| 'serialization.format'='\u0001')
|
| STORED AS INPUTFORMAT
|
| 'org.apache.hadoop.mapred.TextInputFormat'
|
| OUTPUTFORMAT
|
| 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
|
| LOCATION
|
| 'hdfs://<hostname>:8020/user/hive/warehouse/t1_value' |
| TBLPROPERTIES (
|
| 'COLUMN_STATS_ACCURATE'='true',
|
| 'numFiles'='1',
|
| 'totalSize'='6',
|
| 'transient_lastDdlTime'='1477441386')
|
+-------------------------------------------------------------------------------------+--+
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)