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

How to pass access tokens from REST client in Apache Drill?

我已经安装了 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 调用(以及来自网络 ui 和 odbc)进行查询,如下所示:

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

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

可能可以在查询时指定一些配置。下面的示例演示了在文件系统插件中如何使用 table() 函数在运行时更改配置选项。在这种情况下,我们在 excel 文件中指定要查询的 sheet。

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

我不知道这是否适用于 REST 插件,但值得一试。 (不可否认,这有点骇人听闻)

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

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

我真的很想知道完成此任务的最佳方法是什么。我相信您不是唯一遇到此问题的人。