hivethriftcontext的get \u partitions \u by \u filter命令的语法是什么?

wz3gfoph  于 2021-06-29  发布在  Hive
关注(0)|答案(0)|浏览(333)

目标

我试图检查配置单元表中是否存在部分指定的分区。

详细信息

我有一个表,有两个分区键,source和date。在一个任务可以执行之前,我需要检查并查看某个特定的分区是否存在 date ( source 未指定)。

尝试

使用luigi的内置hive分区目标和默认客户机,我可以轻松做到这一点:

>>> import luigi.hive as hive
>>> c = hive.HivePartitionTarget('data',{"date":"2016-03-31"})
>>> c.exists()
True
>>> c = hive.HivePartitionTarget('data',{"date":"2016-03-32"})
>>> c.exists()
False

但是默认客户机非常非常慢,因为它正在启动配置单元的命令行示例并运行查询。所以我试着把默认客户机换成节俭客户机,结果发生了:

>>> d = hive.HivePartitionTarget('data',{"date":"2016-03-31"}, client=hive.MetastoreClient())
>>> d.exists()
False

似乎这两个客户机对部分指定的分区的解释不同。
我已经编写了我自己的客户机,它继承了metastoreclient,并添加了我过去需要的一些附加功能,因此我不介意为我自己的设计添加部分指定的分区检查。看起来客户端有我需要的功能:

>>> from pprint import pprint
>>> import luigi.hive as hive
>>> client = hive.HiveThriftContext().__enter__()
>>> pprint([command for command in dir(client) if 'partition' in command])
[ # Note: I deleted the irrelevant commands, this was a really long list
 'get_partition',
 'get_partition_by_name',
 'get_partition_names',
 'get_partition_names_ps',
 'get_partition_with_auth',
 'get_partitions',
 'get_partitions_by_filter',
 'get_partitions_by_names',
 'get_partitions_ps',
 'get_partitions_ps_with_auth',
 'get_partitions_with_auth',
 # Even more commands snipped here
 ]

看起来像是命令 get_partitions_by_filter 可能正是我想要的,但除了自动生成的类型列表之外,我在任何地方都找不到任何文档。我在使用更简单的函数时遇到了类似的问题:当我完全指定了我知道存在的分区时,我无法获得 get_partition 或者 get_partition_by_name 找到他们。我确信这是因为我没有以正确的格式提供参数,但是我不知道正确的格式是什么,而且我对猜测的耐心已经耗尽了。
hivethriftcontext的get \u partitions \u by \u filter命令的语法是什么?
后续问题:你是怎么知道的?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题