配置单元未为倾斜的表创建单独的目录

问题描述 投票:0回答:1

我的配置单元版本是1.2.1。我正在尝试创建一个倾斜的表,但是它显然似乎没有用。这是我的表创建脚本:-

CREATE EXTERNAL TABLE IF NOT EXISTS mydb.mytable
(
country string,
payload string
)
PARTITIONED BY (year int,month int,day int,hour int)
SKEWED BY (country) on ('USA','Brazil') STORED AS DIRECTORIES
STORED AS TEXTFILE;


INSERT OVERWRITE TABLE mydb.mytable PARTITION(year = 2019, month = 10, day=05, hour=18)
SELECT country,payload FROM mydb.mysource;

select查询返回国家名称和一些关联的字符串数据(有效负载)。因此,基于我在“国家”列上指定倾斜的方式,我期望insert语句导致为美国和巴西创建单独的目录(选择查询返回的国家/地区为美国和巴西的足够行),但这显然没发生我看到该配置单元创建了名为“ HIVE_DEFAULT_LIST_BUCKETING_DIR_NAME”的目录,并且所有值都进入该目录中的单个文件中。偏斜表仅应将具有默认值(未在表创建语句中指定)的行发送到公用目录(这似乎是HIVE_DEFAULT_LIST_BUCKETING_DIR_NAME),并且应为偏斜值的行创建专用目录。但是全部都转到默认目录,而其他目录甚至都没有创建。我是否必须切换任何配置单元选项才能使此功能正常工作?

hadoop hive
1个回答
0
投票

它看起来像是旧的错误,看起来还没有修复。 https://issues.apache.org/jira/browse/HIVE-13697。基本上在内部,当Hive存储在表创建期间指定的这些偏斜值时,在存储到metastore中之前,它们会转换为小写。这就是为什么现在的解决方法是在select语句中转换大小写,以便转到正确的存储桶。我对此进行了测试,并以此方式工作。

© www.soinside.com 2019 - 2024. All rights reserved.