表名作为 Sqoop 中的保留关键字

Tables names as reserved keywords in Sqoop

我有一个 table int 在 MySQL

create table `int` (c1 varchar(20));

insert into `int` values ('some data');

我尝试使用 Sqoop 将其导入到配置单元中:

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: Error executing statement: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'int AS t WHERE 1=0' at line 1

这是预期的。

我试过了,--table "int"--table `int`--table "`int`"

None 他们成功了。

有没有办法告诉 sqoop 创建查询:

SELECT t.* FROM `int` AS t WHERE 1=0


[ ]用于绕过SQL服务器中的保留字。

在 SQL 服务器 --table dbo.[int] 为我工作。

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

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

您可以使用 --query 而不是 --table:

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

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