Hive:创建外部表:显示分区不执行任何操作

时间:2016-03-30 15:49:30

标签: hive

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

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

请建议

2 个答案:

答案 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”的配置单元元存储中。