具有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读取树目录结构并自动推断分区模式?还是总是需要将每个分区自动添加到表中?
2条答案
按热度按时间x8diyxa71#
ALTER TABLE ... RECOVER PARTITIONS
,这还没有记录。lokaqttq2#
你可以使用Hive,因为 Impala 共享同一个元存储这应该不是一个问题。我假设在talbe status\u logs的定义中,位置被设置为“/hdfs/status\u logs”。
在配置单元中发出命令
这将自动将所有分区添加到元存储中。回到 Impala ,你要做的就是
你可以看到所有的分区。验证你能做什么(你可能已经知道了)。