首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在一个配置单元外部表中创建存储桶吗?

我可以在一个配置单元外部表中创建存储桶吗?
EN

Stack Overflow用户
提问于 2020-07-30 20:26:07
回答 1查看 1.2K关注 0票数 1

我正在创建一个引用HDFS位置中的ORC文件的外部表。ORC文件的存储方式是按照日期对外部表进行分区(映射到HDFS上的date wise文件夹,作为分区)。然而,我想知道我是否可以在这些外部表上强制'Bucketing‘,因为底层数据/文件不是由hive’管理‘的。它们是在外部编写的,因此可以在Hive外部表中使用bucketing吗?

配置单元允许我在创建外部表时使用'CLUSTERED BY‘子句。但我不能理解hive如何将数据重新分配到存储桶中,HDFS上已经作为ORC文件写入了什么?

我在下面的外部表中看到过类似的分区和分组表问题:

Hive: Does hive support partitioning and bucketing while usiing external tables

Can I cluster by/bucket a table created via "CREATE TABLE AS SELECT....." in Hive?

但答案是只讨论外部表中的分区支持或托管表中的存储桶支持。我知道这两个选项,并已经在使用它,但需要关于Hive外部表中的bucketing支持的具体答案。

那么,总而言之,Hive外部表是否支持分组表?如果是,配置单元如何将外部文件夹中的数据重新分配到存储桶中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-31 18:25:16

是的,Hive支持外部表的分组化和分区。

试试看:

代码语言:javascript
复制
SET hive.tez.bucket.pruning=true;
SET hive.optimize.sort.dynamic.partition=true;
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.enforce.bucketing = true;

drop table stg.test_v1;
create external table stg.test_v1 
(
       id bigint
      ,name string
)
partitioned by (created_date string)
CLUSTERED BY(name) INTO 3 BUCKETS
stored as ORC
;

INSERT OVERWRITE TABLE stg.test_v1 partition(created_date)
SELECT 
      id, name, created_date
FROM
(select stack(3, 
             1, 'Valeriy', '2020-01-01',
             2, 'Victor', '2020-01-01',
             3, 'Ankit', '2020-01-01'
             ) as(id, name, created_date)
)s;

DESC FORMATTED表示:

代码语言:javascript
复制
Table Type:          EXTERNAL_TABLE 
...
Num Buckets:         3                     
Bucket Columns:      [name] 

加载更多行,您将看到,它将为每个分区创建3个文件

有关托管表和外部表支持的功能的更多详细信息,请参阅本文档:Managed vs External Tables

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63173151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档