用更新的文件覆盖配置单元表

waxmsbnn  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(1277)

我有一个csv文件:

Name,Age,City,Country

SACHIN,44,PUNE,INDIA
TENDULKAR,45,MUMBAI,INDIA
SOURAV,45,NEW YORK,USA
GANGULY,45,CHICAGO,USA

我创建了一个配置单元表并将数据加载到其中。
我发现上面的文件是错误的,更正后的文件如下:

Name,Age,City,Country

SACHIN,44,PUNE,INDIA
TENDULKAR,45,MUMBAI,INDIA
SOURAV,45,NEW JERSEY,USA
GANGULY,45,CHICAGO,USA

我需要用正确的文件更新我的主表。
我试过以下方法。
1-在city上创建主表作为分区表,并动态加载第一个文件。
步骤1-创建一个临时表并加载旧的.csv文件,不分区。我所做的这一步是通过不为每个分区创建单独的输入文件来动态地在主表dyn中插入数据。

create table temp(
name string,
age int,
city string,
country string)
row format delimited
fields terminated by ','
stored as textfile;

步骤2-将旧文件加载到临时表中。 load data local inpath '/home/test_data/old.csv' into table temp; 步骤3-创建主分区表。

create table dyn(
name string,
age int)
partitioned by(city string,country string)
row format delimited
fields terminated by ','
stored as textfile;

步骤4-将旧的.csv文件从临时表动态插入分区表。

insert into table dyn
partition(city,country)
select name,age,city,country from temp;

旧记录动态插入主表。在接下来的步骤中,我将尝试更正主表 dyn 从旧.csv到新.csv
第5步-用新的正确的输入文件创建另一个临时表。

create table temp1(
name string,
age int,
city string,
country string)
row format delimited
fields terminated by ','
stored as textfile;

第6步-将新的正确的输入文件加载到第二个临时表中,然后该临时表将用于覆盖主表,但仅覆盖旧.csv中数据错误的行。那是给你的 SOURAV,45,NEW YORK,USASOURAV,45,NEW JERSEY,USA . load data local inpath '/home/test_data/new.csv' into table temp1; 覆盖主表,但仅覆盖old.csv中数据错误的行。那是给你的 SOURAV,45,NEW YORK,USASOURAV,45,NEW JERSEY,USA .
最后覆盖步骤7尝试1-

insert overwrite table dyn partition(country='USA' , city='NEW YORK') select city,country from temp1 t where t.city='NEW JERSEY' and t.country='USA';

result:- inserted “名称”列中为空。

NEW JERSEY      NULL    NEW YORK        USA

最后覆盖步骤7尝试2-

insert overwrite table dyn partition(country='USA' , city='NEW YORK') select name,age from temp1 t where t.city='NEW JERSEY' and t.country='USA';

result:- No change in dyn table. Same as before. NEW YORk did not update to NEW JERSEY 最终覆盖步骤7尝试3-

insert overwrite table dyn partition(country='USA' , city='NEW YORK') select * from temp1 t where t.city='NEW JERSEY' and t.country='USA';

error:- FAILED: SemanticException [Error 10044]: Line 1:23 Cannot Insert into target table because column number/types are different. Table insclause-0 has 2 columns,but query has 4 columns 解决这个问题的正确方法是什么。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题