我想在 Azure Databricks 中创建一个 API 端点,将增量表数据发布给用户。我通过搜索发现没有 REST API 来公开增量表内容。是真的吗?
在Databricks中没有REST Api来获取增量表中的数据,但是我们可以使用Databricks作业获取增量表的数据。
按照以下步骤操作,
首先,在databricks中创建一个notebook,它获取delta表中的数据并以Json格式返回数据。 在您的笔记本中添加以下代码,并根据您的表格进行相应更改。
df = spark.sql("SELECT * FROM test")
j_son = df.toJSON()
res=""
for i in j_son.collect():
res = res + "," + i
dbutils.notebook.exit("["+res[1:]+"]")
然后使用此笔记本创建一个作业。
在下一页中创建任务名称,选择笔记本的路径以及需要运行它的集群。 然后点击创建。
创建后您将获得如下详细信息,复制作业ID。
这是 databricks 中的作业,提供用于运行作业、获取该特定作业的结果的 API。
接下来创建一个支持服务器,其中 API 请求引发到 databricks 作业。 我使用过 javascript 和expressJs 框架。
在可视代码中打开新文件夹并在终端中执行以下命令。确保您的系统中安装了
nodeJs
。
npm install express axios cors
您将在文件夹中获得如下项目结构。
接下来,创建.js文件,我的是
btst.js
。
创建后,在该文件中添加以下代码。
const express = require('express');
const axios = require('axios');
const cors = require('cors');
const app = express();
app.use(cors({
origin:'*'
}));
const port = 5000;
// Set the access token for authentication
const token = 'your databricks token';
// Set the base URL for the Databricks REST API
const baseUrl = 'https://your databricks host/api/2.1/';
app.get('/runjob', async function(req, res) {
try {
const headers = {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const requestBody = {
job_id: "1121949406005982"
};
const response = await axios.post(`${baseUrl}jobs/run-now/`, requestBody, { headers });
console.log(`run id : ${response.data.run_id}`)
console.log("job is running...")
const t_res = await axios.get(`${baseUrl}jobs/runs/get?run_id=${response.data.run_id}`,{ headers })
task_id = t_res.data.tasks[0].run_id
console.log(`task id : ${task_id}`)
await sleep(15000)
const d_res = await axios.get(`${baseUrl}jobs/runs/get-output?run_id=${task_id}`,{ headers })
j_res = JSON.parse(d_res.data.notebook_output.result)
console.log(j_res)
res.send(j_res);
} catch (error) {
console.log(error)
res.status(500).send(`Error1.......${error}`);
}
});
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`);
});
您可以在此处粘贴之前在 databricks 中复制的作业 ID。
然后在终端中执行以下命令。
node yourfilename.js
就我而言是
node btst.js
然后您的服务器将在
http://localhost:5000
运行。
您在浏览器中或在端点使用邮递员向此 url 发送
GET
请求。
http://localhost:5000/runjob
,您将获得json格式的数据,以便您可以在任何地方使用它。
这是下面的结果,需要 15 秒才能显示,因为向作业发送 post 请求后需要运行任务,大约需要 10-15 秒。
databricks 表中的数据是
您可以利用 Databricks SQL 语句执行 API 来访问 Azure Databricks 上的数据。按照 tutorial 进行操作,该教程展示了如何使用 curl 来使用该 API