我在MySQL中有一个表int
create table `int` (c1 varchar(20));
insert into `int` values ('some data');
我尝试使用Sqoop在hive中导入它:
sqoop import --connect='jdbc:mysql://xxx.xxx.xxx.xxx/classicmodels' --driver com.mysql.jdbc.Driver --username xxx --password xxx --table int --delete-target-dir --target-dir /tmp/test --hive-import --hive-table default.test --hive-drop-import-delims --null-string '\\N' --null-non-string '\\N' --split-by col_date -m 1 --verbose
在内部,它正在创建SELECT t.* FROM int AS t WHERE 1=0
错误:
预计16/08/18 13:43:20 ERROR manager.SqlManager:执行语句时出错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在#t; int附近使用正确的语法,其中1 = 0'在第1行
。
我试过,--table "int"
,--table `int`
和--table "`int`"
。
他们都没有工作。
有没有办法告诉sqoop创建查询:
SELECT t.* FROM `int` AS t WHERE 1=0
[ ]
用于绕过SQL Server中的保留字。
在SQL Server --table dbo.[int]
为我工作。
答案 0 :(得分:0)
提供--table \`int\`
。我记得它是这样工作的。
答案 1 :(得分:0)
另一种方式: 使用Free-form Query Imports
您可以使用--query
代替--table
:
sqoop import \
--query 'SELECT c1 FROM `int` WHERE $CONDITIONS'
...
当您在列中反转关键字时,它特别有用。