HiveThriftContext的get_partitions_by_filter命令的语法是什么?

时间:2016-06-02 16:40:15

标签: python-2.7 hive thrift-protocol luigi

目标

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

详细

我有一个包含两个分区键的表,来源日期。在任务可以执行之前,我需要检查并查看某个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

但是默认客户端真的非常慢,因为它正在启动一个命令行的hive实例并运行一个查询。所以我试图将默认客户端换成节俭客户端,这就发生了:

>>> 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_partitionget_partition_by_name来查找它们。我确信这是因为我没有以正确的格式提供论据,但我不知道正确的格式是什么,而且我的耐心已经用尽猜测。

HiveThriftContext的get_partitions_by_filter命令的语法是什么?

跟进问题:你是怎么想出来的?

0 个答案:

没有答案