配置单元在插入时在分区目录下创建额外的子文件夹

a64a0gku  于 2021-06-28  发布在  Hive
关注(0)|答案(3)|浏览(274)

我有一张按年、月、日、时划分的table。如果我对一个特定的分区使用下面的insert overwrite,它会将一个文件放在适当的目录结构下。此文件包含字符串:-

INSERT OVERWRITE TABLE testtable PARTITION(year = 2017, month = 7, day=29, hour=18)
SELECT tbl.c1 FROM  
(
select 'abc' as c1
) as tbl;

但是如果我使用下面的语句,hive会在文件夹“hour=18”下创建三个新文件夹。

这三个子文件夹中的每一个子文件夹都有一个文件。

INSERT OVERWRITE TABLE testtable PARTITION(year = 2017, month = 7, day=29, hour=18)
SELECT tbl.c1 FROM  
(
select 'abc' as c1
union ALL
select 'xyz' as c1
union ALL
select 'mno' as c1
) as tbl;

当我查询数据时,它会按预期显示数据。但它为什么要创建这3个新文件夹呢?因为分区方案只适用于年、月、日和小时,所以我不希望hive为这些以外的任何东西创建文件夹。

fcwjkofz

fcwjkofz1#

实际上,它与插入覆盖或分区无关。
是union all语句添加了额外的目录。为什么会困扰你?
你可以做一些分发的恶作剧或设置数量的减少到1把这个文件。

sxissh06

sxissh062#

嗨,伙计们,我也有同样的问题,想和大家分享。
union all在表中添加额外的子文件夹。
表上的count()将给出0条记录,msck修复将与默认属性一起出错。使用set hive.msck.path.validator=ignore后;msck不会出错,但会显示消息“partitions not in metastore”
仅在通过dogboneblues设置上述属性之后(设置hive.mapred.supports.subdirectories=true;设置mapred.input.dir.recursive=true;)表正在返回值。(count(

owfi6suc

owfi6suc3#

如果您不关心重复项,可以使用“union”而不是“union all”“联合”不应创建子文件夹。

相关问题