我有一个主表(Employee),它有10列,我可以使用load data inpath /file1.txt into table Employee
我的问题是如果我的文件file2.txt具有相同的列但缺少第3列和第5列,如何处理同一个表(Employee)。如果我直接加载数据,最后一列将是NULL
NULL
。但它应该将第3列作为NULL加载,第5列作为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
在file2.txt
中,我们缺少2列,即sal
和state
。
我们需要使用相同的Employee表来处理它吗?
答案 0 :(得分:0)
我不知道有任何方法可以创建一个由具有非同质结构的数据文件支持的表。但是,您可以为不同的列配置定义单独的表,然后定义查询两者的视图。
我认为如果我提供一个例子会更容易。我将使用两个人的表,两个都有一个名称列,但一个存储高度,而另一个存储重量:
> 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
,因为后者会尝试删除重复的行,这会让它变得非常昂贵。
答案 1 :(得分:0)
似乎无法直接加载到指定的列中。
因此,您可能需要这样做:
情况与this question非常相似,它涵盖了相反的情况(您只想加载几列)。