mysql sqoop中的特殊字符导入为Text和Parquet文件

时间:2017-01-31 06:20:09

标签: mysql hive special-characters sqoop parquet

我有1000个表,mysql中的每个表都有超过100000条记录。表格有300-500列。 某些表的列具有特殊字符,如。(点)和列名称中的空格。

现在我想做sqoop导入并在单个镜头查询中创建HDFS中的hive表,如下所示为textfile

sqoop import --connect ${domain}:${port}/$(database) --username ${username} --password ${password} --table $(table) -m 1 --hive-import --hive-database ${hivedatabase} --hive-table $(table) --create-hive-table --target-dir /user/hive/warehouse/${hivedatabase}.db/$(table)

在此之后创建了hive表,但是当我在表上选择* query时,它将错误显示为

此错误输出是示例输出。

Error while compiling statement: FAILED: RuntimeException java.lang.RuntimeException: cannot find field emp from [0:emp.id, 1:emp.name, 2:emp.salary, 3:emp.dno]

然而,当我作为镶木地板文件导入时,表格被创建,当我选择查询时,查询会给出预期结果。即使。(点)也会自动替换为_(下划线)

为什么会这样?

2 个答案:

答案 0 :(得分:1)

上述原因是由于Hive的限制。在配置单元中,它们禁用了列名称中带有点/冒号的配置单元表的创建。

他们在https://issues.apache.org/jira/browse/HIVE-10120

处有一个Jira

答案 1 :(得分:0)

这是因为你在列名中有这些特殊字符,它不会发生在镶木地板中,因为SQOOP正在将列名转换为有效的java indetifiers(例如,java不允许空格中的空格)身份标识)。一个workound是我们的字符`来选择你的列1到1

select
`.(dot)`
from yourtable.

让我知道它是否有效。