表在Sqoop中将其命名为保留关键字

时间:2016-08-18 08:35:36

标签: mysql sqoop

我在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]为我工作。

2 个答案:

答案 0 :(得分:0)

提供--table \`int\`。我记得它是这样工作的。

答案 1 :(得分:0)

另一种方式: 使用Free-form Query Imports

您可以使用--query代替--table

sqoop import \
  --query 'SELECT c1 FROM `int` WHERE $CONDITIONS'
  ...

当您在列中反转关键字时,它特别有用。