我有一个临时的外部表,并将来自hdfs的数据放入这个表中。现在,我将相同的数据插入到分区主外部表中。数据插入成功,但当我使用列查询主表时,得到的列值不同。
我已经使用csv文件将数据加载到包含四个字段的临时文件中。
col1=id
col2=visitDate
col3=comment
col4=age
以下是查询及其结果:
临时表:
create external table IF NOT EXISTS dummy1(id string,visitDate string,comment string, age string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
;
MAIN Table:
create external table IF NOT EXISTS dummy1(id string,comment string)
PARTITIONED BY (visitDate string, age string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS ORC
;
Result:
Temporary table:
select *from incr_dummy1;
1 11 a 20
2 12 b 3
1 13 c 34
4 14 d 23
5 15 e 45
6 16 f 65
7 17 g 78
8 18 h 9
9 19 i 12
10 20 j 34
select visitDate,age from incr_dummy1;
11 20
12 3
13 34
14 23
15 45
16 65
17 78
18 9
19 12
20 34
Main Table:
select *from dummy1;
1 11 a 20
2 12 b 3
1 13 c 34
4 14 d 23
5 15 e 45
6 16 f 65
7 17 g 78
8 18 h 9
9 19 i 12
10 20 j 34
select visitDate,age from dummy1;
a 20
b 3
c 34
d 23
e 45
f 65
g 78
h 9
i 12
j 34
所以在上面的主外部表中,当我查询“visitdate”列时,“comment”列的值出现了。
请告诉我我犯了什么错误?
1条答案
按热度按时间owfi6suc1#
如我所见,列顺序是
not same in temporary and final tables
.从中插入数据时
Temporary table to final table
检查列的顺序是否正确select statement(partition cols needs to be at the end of select cols)
.以防万一,如果你仍然有问题,那么最好检查
因为您有一个外部分区表(当我们删除表数据时,它不会被删除到hdfs上),
check the hdfs directory
有没有多余的文件没有被删除。那么
drop the table, delete the hdfs directory
以及create the table then run your job again
.更新:
Option1:
是否可以按顺序匹配列temporary table with final table
,如果是,则更改列的顺序。Option2:
使用subquery with quoted identifier
排除原始列并仅将别名列放入最终的select查询。