我正在自己的数据库中创建一个外部表:
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
时,我只是输出正常。
但是,有一个表具有相同的DDL,并且在另一个数据库中具有相同的位置,当我执行SHOW PARITITIONS TEST
时会给出结果。我也试过显示分区的MSCK REPAIR TABLE TEST
。
请建议
答案 0 :(得分:2)
使用分区时,执行DDL时不会创建实际分区。将数据加载到表中时会创建分区。因此,您需要加载数据,然后您将能够使用show partitions语句查看分区。
答案 1 :(得分:0)
当我们创建带有PARTITION的EXTERNAL TABLE时,我们必须使用给定分区的数据位置来更改EXTERNAL TABLE。但是,它不必与创建EXTERNAL TABLE时指定的路径相同。
con.query(`SELECT * FROM users`,
function(err, data) {
// this callback always delays 4 seconds, this callback executes straight away without waiting.
return data;
}
);
当我们在创建EXTERNAL TABLE时指定LOCATION'/ data / a1 / pnt / lte / formatted / evt'(尽管它是可选的)时,我们可以利用对该表进行修复操作的一些优势。因此,当我们想通过诸如ETL之类的过程将文件复制到该目录中时,我们可以使该分区与EXTERNAL TABLE同步,而不必编写ALTER TABLE语句来创建另一个新分区。
如果我们已经知道HIVE将为下一个数据集创建的分区的目录结构(此处为C = 20),我们可以简单地将数据文件放在该位置,例如'/ data / a1 / pnt / lte /formatted/evt/A=2016/B=07/C=20/data.txt'并运行如下所示的语句:
hive> ALTER TABLE test1 ADD PARTITION (A=2016, B=07, C=19)
hive> LOCATION '/data/a1/pnt/lte/formatted/evt/somedatafor_20160719'
hive> ;
上面的语句会将分区同步到表“ test1”的配置单元元存储中。