hive分区可以指向主分区内的多个目录吗?

问题描述 投票:0回答:0

我的文件夹结构如下


gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-01/.bin_1
gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-01/.bin_2
gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-01/.bin_3
gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-01/part1.snappy.orc
gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-02/.bin_1
gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-02/.bin_2
gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-02/part2.snappy.orc

我想要一个位于上述位置顶部的外部配置单元表,该表按颜色和 txn_dt 列进行分区。我需要 txn_dt 分区指向存储桶内以 .bin 开头的所有文件夹,并忽略该分区内的实际文件(本质上是给我 .bin 下每个分区中的文件计数)

我通过运行以下命令从 Spark shell 获取计数

spark.read.orc("gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=*/.bin*").count 

但是我只能为每个 txn_dt 分区添加一个 bin 文件夹,因为正则表达式会抛出以下错误

use db;

ALTER TABLE tb PARTITION(color='red',txn_dt='2023-01-01') SET LOCATION "gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-01/.bin_1";

ALTER TABLE tb PARTITION(color='red',txn_dt='2023-01-02') SET LOCATION "gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-02/.bin_1";

上述方法有效,但我错过了 txn_dt=2023-01-01 的 .bin_2、.bin_3 分区和 txn_dt=2023-01-02 的 .bin_1、.bin_2 分区

我尝试过类似下面的东西

ALTER TABLE tb PARTITION(color='red',txn_dt='2023-01-01') SET LOCATION "gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-01/.bin*";

ALTER TABLE tb PARTITION(color='red',txn_dt='2023-01-02') SET LOCATION "gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-02/.bin*";

这导致了以下失败

Caused by: java.util.concurrent.ExecutionException: java.io.FileNotFoundException: listStatus(hadoopPath: gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-02/.bin*): 'gs://bucket_name/data/db_name.db/table_name/color=red/txn_dt=2023-01-02/.bin*' does not exist.
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.generateSplitsInfo(OrcInputFormat.java:1673)
        ... 15 more
apache-spark apache-spark-sql hive
© www.soinside.com 2019 - 2024. All rights reserved.