如何在 Apache Drill 中从 REST 客户端传递访问令牌?

问题描述

我已经设置了 Apache Drill,创建了 http 存储插件并将其配置设置如下:

{
  "type": "http","cacheResults": false,"connections": {
    "accounts": {
      "url": "https://my.datasource.url","method": "GET","headers": {
        "Authorization": "Bearer access_token...","Accept": "application/json"
      },"authType": "none","userName": null,"password": null,"postBody": null,"params": null,"dataPath": "QueryResponse/Account","requireTail": false,"inputType": "json"
    }
  },"timeout": 0,"proxyHost": null,"proxyPort": 0,"proxyType": "direct","proxyUsername": null,"proxyPassword": null,"enabled": true
}

我可以通过 rest 调用(以及来自 web ui 和 odbc)运行查询,如下所示:

{
  "queryType": "sql","query": "select * from myds.accounts"
}

问题是,访问令牌的生命周期很短,多个用户需要使用自己的访问令牌访问这些数据源,因此通过连接保存令牌对我不起作用。
有什么办法可以在发送查询时从客户端发送访问令牌?我不喜欢使用 Rest API 或 ODBC,它们中的任何一个都可以解决我的问题。谢谢

解决方法

可能在查询时指定一些配置。下面的示例演示了在文件系统插件中如何使用 table() 函数在运行时更改配置选项。在本例中,我们指定要在 Excel 文件中查询哪个工作表。

SELECT *
FROM table(dfs.`excel/test_data.xlsx` (type => 'excel',sheetName =>'secondSheet'))

我不知道这是否适用于 REST 插件,但值得一试。 (无可否认,这有点像黑客)

另一个需要修改插件的选项是创建可以在查询时指定的特殊变量。例如,我们可以创建一个 _headers 变量,以便您可以在查询时将项目插入到标题中。因此,查询可能如下所示:

SELECT...
FROM ...
WHERE _headers="Authorization=1234"

我真的想知道实现这一目标的最佳方法是什么。我确定您不是唯一遇到此问题的人。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...