【发布时间】:2021-07-04 01:18:46
【问题描述】:
我有一个配置单元表,它是多列上的分区。 我需要获取带有部分分区名称的分区列表。
例如:表 foo_table 是分区上的
| PARTITIONED BY ( |
| `dt` string COMMENT 'Custom Partition.', |
| `h` string COMMENT 'Custom Partition.', |
| `b` string COMMENT 'Custom Partition.', |
| `sv` string COMMENT 'Custom Partition', |
| `p` string COMMENT 'Custom Partition', |
| `dc` string COMMENT 'Custom Partition')
现在我需要获取所有分区让我们说 dt=somevalue
如果我给出所有分区列的值,则下面的代码有效。
List<String> list = ...
list.add("dt=2021-02-01/h=19/b=30/sv=1/p=03/dc=aa")
List<Partition> partitions = HiveMetaStoreClient.getPartitionsByNames(database, tableName, list)
但是如果我想通过只给出dt=2021-02-01/h=19this 来获取分区是行不通的。
List<String> list = ...
list.add("dt=2021-02-01/h=19")
//OR
list.add("dt=2021-02-01/h=19/")
//OR
list.add("dt=2021-02-01/h=19/*")
//OR
list.add("dt=2021-02-01/h=19/b=*/sv=*/p=*/dc=*")
List<Partition> partitions = HiveMetaStoreClient.getPartitionsByNames(database, tableName, list)
如何做到这一点?
【问题讨论】:
-
试试
dt=2021-02-01/h=19/?带有斜杠。 -
@mck 刚刚试过,没用。
-
有
listPartitionsByFilter()、listPartitionsByExpr()方法,但它们只支持>, <, >= etc.样式的表达式,所以无论如何可能对你没用。 -
我是 hive 新手,但这不是很常见的问题吗?