我们的应用程序(python 3.6(是一个查询生成器,允许其用户从不同的数据库查询多个表。我们正在尝试添加 Qubole 支持。目前正在尝试同化Presto引擎集群。我们有几个 API 令牌,需要能够同时查询不同的 presto DB。我们开始使用qds_sdk来实现这一点,但是,似乎类Qubole是一个Singlton,并且类PrestoCommand直接与之交互。
请考虑 qds-sdk-py/example/qubole_presto_api_example.pyhttps://github.com/qubole/qds-sdk-py/blob/master/example/qubole_presto_api_example.py
第 67-68 行
Qubole.configure(api_token=‘YOUR-QUBOLE-API-TOKEN’)
get_results(execute_query(“select * from default.cities limit 100;“))
我们的服务需要能够具有多个 Qubole.configure 对象并根据用户交互查询它们。即:
q1 = Qubole.configure(api_token=‘Token1’)
q2 = Qubole.configure(api_token=‘Token2’)
*user triggeres an event*
q1.get_results(execute_query(“query”))
你会怎么做?我应该在尝试访问表之前实现一些锁定吗?
如果您的问题是如何使用不同的 API 令牌将查询发送到不同的 Qubole 帐户(因此也是 Presto 集群(,我相信您已经通过实例化不同的 Qubole 客户端进行了排序。
如果您需要等待每个查询完成才能继续,那么您也可以使用带有轮询的循环。下面是一个快速示例,说明如何针对一个查询处理它:
presto_command=PrestoCommand.create(query=my_query, label='presto_cluster_label')
while True:
sts = PrestoCommand.find(presto_command.id).status
if sts == u'error' or sts == u'done' or sts == u'cancelled':
break
time.sleep(10)
if sts != u'done':
error_str = presto_command.get_log()
sys.stderr.write(error_str)
raise QuboleError(error_str)
presto_command.get_results()