我有1000个表,mysql中的每个表都有超过100000条记录。这些表有300-500列。
某些表的列具有特殊字符,如。(点)和列名称中的空格。
现在我想进行sqoop导入,并在单个镜头查询中创建一个HDFS中的hive表,如下所示
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表,但是当我查询表时,它将错误显示为
此错误输出是示例输出。
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]
在执行sqoop导入时,如何用_(下划线)替换。(点)。我想动态地这样做。
答案 0 :(得分:2)
使用sqoop import \与 - 查询选项而不是--table并在查询中使用replace函数。
即
sqoop import --connect $ {domain}:$ {port} / $(database) - username $ {username} --password $ {password} \ - 查询'选择col1,将(col2,'。','_')替换为表格中的col。
或(不推荐)编写一个可以查找和替换“。”的shell脚本。到/ user / hive / warehouse / $ {hivedatabase}的“_”(Grep命令).db / $(table)