我的文件夹结构如下
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