Hadoop 如果文件的列数不同,如何将数据加载到同一配置单元表中

Hadoop 如果文件的列数不同,如何将数据加载到同一配置单元表中,hadoop,hive,hiveql,hadoop2,Hadoop,Hive,Hiveql,Hadoop2,我有一个主表(Employee),它有10列,我可以使用load data inpath/file1.txt将数据加载到Employee表中 我的问题是,如果我的文件file2.txt有相同的列,但缺少第3列和第5列,如何处理相同的表(Employee)。如果我直接加载数据,最后一列将是NULLNULL。但它应该将第三列加载为NULL,第五列加载为NULL 假设我有一个表Employee,我想将file1.txt和file2.txt加载到表中 file1.txt ========== id na

我有一个主表(Employee),它有10列,我可以使用
load data inpath/file1.txt将数据加载到Employee表中

我的问题是,如果我的文件file2.txt有相同的列,但缺少第3列和第5列,如何处理相同的表(Employee)。如果我直接加载数据,最后一列将是
NULL
NULL
。但它应该将第三列加载为NULL,第五列加载为NULL

假设我有一个表Employee,我想将
file1.txt
file2.txt
加载到表中

file1.txt ========== id name sal deptid state coutry 1 aaa 1000 01 TS india 2 bbb 2000 02 AP india 3 ccc 3000 03 BGL india file2.txt id name deptid country 1 second 001 US 2 third 002 ENG 3 forth 003 AUS file1.txt ========== id名称sal deptid state coutry 1 aaa 1000 01 TS印度 2 bbb 2000 02美联社印度 3 ccc 3000 03 BGL印度 file2.txt id名称deptid国家/地区 1秒001美国 二○○二年三月 3澳大利亚 在
file2.txt
中,我们缺少两列,即
sal
state


我们需要使用同一个Employee表来处理它吗?

我不知道有什么方法可以创建一个由非同质结构的数据文件支持的表。但是,您可以为不同的列配置定义单独的表,然后定义一个同时查询这两个表的视图

我想如果我举个例子会更容易。我将使用两个人名表,两个人名表都有一列,但其中一个存储身高,而另一个存储体重:

>创建表table1(名称字符串,高度int);
>在表1中插入数值('Alice',178),('Charlie',185);
>创建表table2(名称字符串,权重int);
>在表2中插入数值('Bob',98),('Denise',52);
>创建将人视为
>从表1中选择名称、高度、空值作为重量
>联合所有
>从表2中选择名称,高度、重量为空;
>按姓名从人员订单中选择*;
+---------+--------+--------+
|姓名|身高|体重|
+---------+--------+--------+
|爱丽丝| 178 |零|
|鲍勃|零| 98|
|查理| 185 |零|
|丹尼斯|零| 52|
+---------+--------+--------+
或者,作为一个更接近您的问题的示例,假设一个表有名称、高度和重量,而另一个表只有名称和重量,因此高度“从中间缺失”:

>创建表table1(名称字符串、高度整数、重量整数);
>在表1中插入数值('Alice',178,55),('Charlie',185,78);
>创建表table2(名称字符串,权重int);
>在表2中插入数值('Bob',98),('Denise',52);
>创建将人视为
>从表1中选择姓名、身高、体重
>联合所有
>从表2中选择名称,高度、重量为空;
>按姓名从人员订单中选择*;
+---------+--------+--------+
|姓名|身高|体重|
+---------+--------+--------+
|爱丽丝| 178 | 55|
|鲍勃|零| 98|
|查理| 185 | 78|
|丹尼斯|零| 52|
+---------+--------+--------+

请确保使用
union all
,而不仅仅是
union
,因为后者试图删除重复的行,这会使成本非常高。

似乎无法直接加载到指定的列中

因此,您可能需要这样做:

  • 将数据加载到与文件匹配的(临时?)表的路径中
  • 通过选择上一个表的内容插入最终表的相关列

  • 这种情况与另一种情况非常相似(您只想加载几列)

    你能从这两个文件中粘贴样本数据吗?按照我读问题的方式,我会说:如果你创建一个表而不是一个视图,它可能就是所要求的。我理解你在第二部分所做的,但我不认为这是提问者需要的。(当然只是猜测)感谢佐尔坦和杰鲁丁的投入。。。我已经编辑了这个问题,请看一看……嗨,拉杰,我仍然认为我的回答告诉你前进的最佳方式。我在示例中提出了自己的模式,因为当时您没有提供自己的模式,但您可以轻松地将我的解决方案应用到您的案例中。在我的第二个示例中,
    height
    的行为类似于您的
    sal
    state
    列-它存在于一个源中,但不存在于另一个源中。只需在您的两个文件上定义两个单独的表,并使用视图定义来统一它们。谢谢Zoltan我同意您的观点,但只要检查是否使用单个表就可以了?配置单元中是否有版本控制概念?