我有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]
然而,当我作为镶木地板文件导入时,表格被创建,当我选择查询时,查询会给出预期结果。即使。(点)也会自动替换为_(下划线)
为什么会这样?
答案 0 :(得分:1)
上述原因是由于Hive的限制。在配置单元中,它们禁用了列名称中带有点/冒号的配置单元表的创建。
处有一个Jira答案 1 :(得分:0)
这是因为你在列名中有这些特殊字符,它不会发生在镶木地板中,因为SQOOP正在将列名转换为有效的java indetifiers(例如,java不允许空格中的空格)身份标识)。一个workound是我们的字符`来选择你的列1到1
select
`.(dot)`
from yourtable.
让我知道它是否有效。