我在mysql中有1000个表,每个表中有超过100000条记录。这些表有300-500列。
有些表的列名中带有特殊字符,如.(点)和空格。
现在,我要执行sqoop导入,并在hdfs中创建一个配置单元表,如下所示
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)
在此之后,将创建配置单元表,但当我查询该表时,它会将错误显示为
此错误输出是一个示例输出。
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导入时,我们如何用∗(下划线)替换.(点)。我想动态地这样做。
1条答案
按热度按时间dffbzjpn1#
使用sqoop import\with--query选项而不是--table,并在查询中使用replace函数。
ie公司
sqoop import--connect${domain}:${port}/$(数据库)--username${username}--password${password}--查询“select col1,replace(col2,',',',','''as col from table”。
或者(不推荐)编写一个shell脚本,它可以在/user/hive/warehouse/${hivedatabase}.db/$(table)中查找并替换“.”到“\”(grep命令)