目标
我试图检查配置单元表中是否存在部分指定的分区。
详细信息
我有一个表,有两个分区键,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命令的语法是什么?
后续问题:你是怎么知道的?
暂无答案!
目前还没有任何答案,快来回答吧!