Apache Sqoop Cookbook 英文版-翻译学习!!
更多信息https://blue-shadow.top/
问题
使用多个表连接查询导入数据的时候,sqoop在重复列的时候将会失败,输出的错误信息类似如下:
Imported Failed: Duplicate Column identifier specified: 'id'
解决方案
在SQL层面对相同的列进行重命名,让每个列的名字唯一。可以使用AS符号。举例来说,从表cities和normcities
中到处城市的名字,可以使用以下的查询:
--query "SELECT \
cities.city AS first_city \
normcities.city AS second_city \
FROM cities \
LEFT JOIN normcities USING(id)
讨论
在初始准备和提交MapReduce作业之前,Sqoop执行若干操作。此类操作之一是获取有关已转移列及其关联类型的元数
据。在此步骤中, Sqoop将生成一个Java类,类中的属性和表的列相应,包括名字和类。Java属性必须是唯一的;因此,
查询中的所有列都必须具有唯一的名称。
虽然数据库通常在表中强制执行唯一的列名, 在这种情形系下,联接操作过程中, 不同表中的两列具有相同的列名
,输出结果集包含两个同名列。如果查询使用类似的片段从所有联接表中选择所有列, 则此问题尤其成问题。
在这种情况下,分别命名每个列, 并使用 AS 子句重命名重复列, 以便查询不会有重复的名称。
网友评论