我正在自己的数据库中创建一个外部表:
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
它显示分区。
请建议
2条答案
按热度按时间toe950271#
使用分区时,在执行ddl时不会创建实际的分区。分区是在将数据加载到表中时创建的。因此,您需要加载数据,然后才能使用show partitions语句查看分区。
sigwle7e2#
当我们用分区创建一个外部表时,我们必须用给定分区的数据位置来更改外部表。但是,它不必与创建外部表时指定的路径相同。
当我们在创建外部表时指定位置'/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”并按如下所示运行语句:
上面的语句将分区同步到表“test1”的配置单元元存储。