Hadoop 在sqoop从Teradata到cloudera配置单元时删除列名中的空格/特殊字符

Hadoop 在sqoop从Teradata到cloudera配置单元时删除列名中的空格/特殊字符,hadoop,hive,teradata,cloudera,sqoop,Hadoop,Hive,Teradata,Cloudera,Sqoop,我能够成功地将Teradata表sqoop到Hive Cloudera中,但Teradata表的列名带有空格,并且有特殊字符,如“Material ID”、“Active/InActive”,就像这样,但在Hive中这不是标准的,并且在查询时会面临很多问题 插入时如何删除列名中的空格和特殊字符 我使用下面的sqoop命令 sqoop import --connect "jdbc:teradata://ABCD/database=db1,logmech=LDAP" \ --username ***

我能够成功地将Teradata表sqoop到Hive Cloudera中,但Teradata表的列名带有空格,并且有特殊字符,如“Material ID”、“Active/InActive”,就像这样,但在Hive中这不是标准的,并且在查询时会面临很多问题

插入时如何删除列名中的空格和特殊字符

我使用下面的sqoop命令

sqoop import --connect "jdbc:teradata://ABCD/database=db1,logmech=LDAP" \
--username **** \
--password **** \
--hive-import \
--hive-overwrite \ 
--hive-database abc_stg \ 
--hive-table product_dim \
--query "select * from product_dim where \$CONDITIONS" \
--target-dir /dev/edl/md/addy/str/abc_stg/product_dim \
--fields-terminated-by '|' -m 1 --delete-target-dir

仅供参考,在Teradata中,对象名称限定符是
(例如
“物料ID”
)。在Hive中,对象名称限定符是
(例如
“物料ID”
)如果列不太多,您可以使用
从product\u dim where…
中选择列名称作为简单名称…。这将解决您的问题,但不是以一种非常干净的方式。@spijs,列很多,我需要为Manu做这件事tables@Dudu马尔科维茨,谢谢你的评论,我们没有任何办法,所以我可以删除列中的空格names@HaneepCRWh目前,您仍然可以创建一个脚本,该脚本将读取所有列名,替换特殊字符,然后修改并运行一个sqoop命令,该命令包含所有列的
列名为simple\u name
。这是一个解决方法,但它应该可以工作并扩展。仅供参考,在Teradata中,对象名限定符是
(例如
“材质ID”)
)。在蜂巢的
`
(例如
`Material ID`
)中,如果列不太多,可以使用
选择列名称作为简单名称,。。。从product\u dim,其中…
。这将解决您的问题,但不是以一种非常干净的方式。@spijs,列很多,我需要为Manu做这件事tables@Dudu马尔科维茨,谢谢你的评论,我们没有任何办法,所以我可以删除列中的空格names@HaneepCR您仍然可以创建一个脚本来读取所有列名,替换特殊字符,然后对所有列修改并运行包含
column\u name为simple\u name
的sqoop命令。这是一个解决办法,但它应该起作用并扩大规模。