配置单元:创建外部表:显示分区不起任何作用

dgtucam1  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(299)

我正在自己的数据库中创建一个外部表:

create external table test1 (

event_uid               string,
event_type_id           int,
event_category_id       int,
event_date              string,
log_date                string,
server                  string,
server_type             string,
process_id              int,
device_id               string,
account_id              string,
ip_address              string,
category_id             string,
content_id              string,
entitlement_id          string,
product_id              string,
sku                     string,
title_id                string,
service_id              string,
order_id                bigint,
transaction_id          bigint,
company_code            string,
product_code            string,
key_value_pairs         map<string,string>,
process_run_id          string) 

partitioned by (A string, B string, C string)

location '/data/a1/pnt/lte/formatted/evt'

当我尝试的时候 SHOW PARTITIONS TEST ,作为一个输出,我只得到ok。但是,在另一个数据库中有一个具有相同ddl和相同位置的表,当我这样做时,它会给出结果 SHOW PARITITIONS TEST . 我也试过了 MSCK REPAIR TABLE TEST 它显示分区。
请建议

toe95027

toe950271#

使用分区时,在执行ddl时不会创建实际的分区。分区是在将数据加载到表中时创建的。因此,您需要加载数据,然后才能使用show partitions语句查看分区。

sigwle7e

sigwle7e2#

当我们用分区创建一个外部表时,我们必须用给定分区的数据位置来更改外部表。但是,它不必与创建外部表时指定的路径相同。

hive> ALTER TABLE test1 ADD PARTITION (A=2016, B=07, C=19)
hive> LOCATION '/data/a1/pnt/lte/formatted/evt/somedatafor_20160719'
hive> ;

当我们在创建外部表时指定位置'/data/a1/pnt/lte/formatted/evt'(尽管它是可选的)时,我们可以利用在该表上执行修复操作的一些优势。因此,当我们希望通过etl之类的过程将文件复制到该目录中时,我们可以将分区与外部表同步,而不是编写alter table语句来创建另一个新分区。
如果我们已经知道hive将为下一个数据集创建的分区的目录结构(这里是c=20),我们可以简单地将数据文件放置在该位置,如“/data/a1/pnt/lte/formatted/evt/a=2016/b=07/c=20/data.txt”并按如下所示运行语句:

hive> MSCK REPAIR TABLE test1;

上面的语句将分区同步到表“test1”的配置单元元存储。

相关问题