从< blah>插入

o2gm4chl  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(243)

在关于动态分区的配置单元文档页面中,有一个多表插入的特定示例:

FROM S
INSERT OVERWRITE TABLE T PARTITION (ds='2010-03-03', hr)
SELECT key, value, ds, hr FROM srcpart WHERE ds is not null and hr>10
INSERT OVERWRITE TABLE R PARTITION (ds='2010-03-03, hr=12)
SELECT key, value, ds, hr from srcpart where ds is not null and hr = 12;

什么是 FROM S 什么事?multi-table insert查询看起来应该在没有它的情况下也能工作,那么我缺少了什么呢?

5cnsuln7

5cnsuln71#

这是多个插入的语法。如果不希望对配置单元对象进行多次传递,则在多个插入覆盖表之前使用from\语句(表、视图、文件、子查询)将导致对from\语句对象进行单次传递。
在上面的例子中,它真的应该是 FROM srcpart 或者应该这样 FROM S srcpart 它引用别名为srcpart的配置单元对象,从中创建两个分区t&r。
例子
查询1:

hive> INSERT OVERWRITE TABLE Raining SELECT * FROM weather WHERE rain = 1;
hive> INSERT OVERWRITE TABLE Sunny SELECT * FROM weather WHERE rain = 0;

问题2:

hive> FROM weather
INSERT OVERWRITE TABLE Raining SELECT * WHERE rain = 1 
INSERT OVERWRITE TABLE Sunny SELECT * WHERE rain = 0;

查询2将生成一个传递表weather,而查询1将生成两个传递来创建相同的2个对象。

相关问题