为分区数据定义impala表模式

cedebl8k  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(364)

具有Parquet格式的Dataframe存储,并基于文件系统结构中一个或多个列的值在不同的文件上进行物理分区,如下所示:

|-region=Europe
|   |-processed=1
|   |   |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet
|   |-processed=2
|   |   |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet
|   |-processed=3
|   |   |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet
|   |-processed=4
|       |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet
|-region=Asia
|   |-processed=2
|   |   |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet
|   |-processed=4
|       |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet
|-region=America
|   |-processed=3
|       |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet
|-_SUCCESS

要使模式知道分区,我将手动添加每个分区:

ALTER TABLE status_log ADD PARTITION (region='Europe', processed="1") LOCATION '/hdfs/status_logs/region=Europe/processed=1';
ALTER TABLE status_log ADD PARTITION (region='Europe', processed="2") LOCATION '/hdfs/status_logs/region=Europe/processed=2';
ALTER TABLE status_log ADD PARTITION (region='Europe', processed="4") LOCATION '/hdfs/status_logs/region=Europe/processed=2';
...
..
.

有没有办法定义表模式,以便impala读取树目录结构并自动推断分区模式?还是总是需要将每个分区自动添加到表中?

x8diyxa7

x8diyxa71#

ALTER TABLE ... RECOVER PARTITIONS ,这还没有记录。

lokaqttq

lokaqttq2#

你可以使用Hive,因为 Impala 共享同一个元存储这应该不是一个问题。我假设在talbe status\u logs的定义中,位置被设置为“/hdfs/status\u logs”。
在配置单元中发出命令

msck repair table status_logs

这将自动将所有分区添加到元存储中。回到 Impala ,你要做的就是

invalidate metadata status_logs

你可以看到所有的分区。验证你能做什么(你可能已经知道了)。

show partitions status_logs

相关问题