gpt4 book ai didi

hadoop - 如果文件具有不同的列数,如何将数据加载到同一个 Hive 表

转载 作者:可可西里 更新时间:2023-11-01 14:56:37 28 4
gpt4 key购买 nike

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

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

假设我有一个 Employee 表,我想将 file1.txtfile2.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  

file2.txt 中,我们缺少 2 列,即 salstate

我们需要使用同一个Employee表怎么处理呢?

最佳答案

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

我觉得如果我提供一个例子会更容易。我将使用两张人表,都有一列姓名,但一张也存储高度,而另一张存储体重:

> create table table1(name string, height int);
> insert into table1 values ('Alice', 178), ('Charlie', 185);

> create table table2(name string, weight int);
> insert into table2 values ('Bob', 98), ('Denise', 52);

> create view people as
> select name, height, NULL as weight from table1
> union all
> select name, NULL as height, weight from table2;

> select * from people order by name;
+---------+--------+--------+
| name | height | weight |
+---------+--------+--------+
| Alice | 178 | NULL |
| Bob | NULL | 98 |
| Charlie | 185 | NULL |
| Denise | NULL | 52 |
+---------+--------+--------+

或者作为您的问题的一个更接近的例子,假设一个表有名称、高度和体重,而另一个只有名称和体重,因此高度“从中间缺失”:

> create table table1(name string, height int, weight int);
> insert into table1 values ('Alice', 178, 55), ('Charlie', 185, 78);

> create table table2(name string, weight int);
> insert into table2 values ('Bob', 98), ('Denise', 52);

> create view people as
> select name, height, weight from table1
> union all
> select name, NULL as height, weight from table2;

> select * from people order by name;
+---------+--------+--------+
| name | height | weight |
+---------+--------+--------+
| Alice | 178 | 55 |
| Bob | NULL | 98 |
| Charlie | 185 | 78 |
| Denise | NULL | 52 |
+---------+--------+--------+

一定要使用union all 而不仅仅是union,因为后者试图删除重复的行,这使得它非常昂贵。

关于hadoop - 如果文件具有不同的列数,如何将数据加载到同一个 Hive 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39580335/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com