qds-sdq-py 中的 Presto Singleton 类需要在运行时与不同的 API 令牌交互



我们的应用程序(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()

相关内容

  • 没有找到相关文章

最新更新