azure - 从 Node.js 函数访问 Azure Synapse Analytics
问题描述
我正在尝试从 Node.js 函数中访问 Azure Synapse SQL 池。我以这篇文章为基础,将认证方式切换为“azure-active-directory-msi-app-service”。
如果我运行该函数,我可以在 Function cmd 中看到 queryText context.log,但不幸的是没有其他任何反应。它在没有任何输出的情况下运行。
我看不到任何其他 context.log 或从该函数获得任何响应。
const Request = require('tedious').Request;
const TYPES = require('tedious').TYPES;
const test = require('lodash')
module.exports = function (context, req) {
//get the Query Parameter
// Create connection to database
const config = {
authentication: {
type: "azure-active-directory-msi-app-service"
},
server: "database.sql.azuresynapse.net",
options: {
database: "database",
encrypt: true,
port: 1433
}
};
const connection = new Connection(config);
// Create array to store the query results
let result = [];
let rowData = {};
// req.query.color will be passed as a query variable in the URL
//const payload = [req.query.color];
// Create query to execute against the database
const queryText = "SELECT TOP (10) [id],[column1],[column2] FROM [dbo].[Table]";
context.log(queryText);
// Create Request object
request = new Request(queryText, function(err) {
context.log("Request")
if (err) {
// Error in executing query
context.log.error(err);
context.res.status = 500;
context.res.body = "Error executing the query";
} else {
context.res = {
status: 200,
isRaw: true,
body: result,
headers: {
'Content-Type': 'application/json'
}
}
}
context.done();
});
// Manipulate the results and create JSON
request.on('row', function(columns) {
rowData = {};
columns.forEach(function(column) {
// IMPORTANT: Change the conversion logic here to adjust JSON format
rowData[column.metadata.colName] = column.value;
});
result.push(rowData);
});
connection.on('connect', function(err) {
if (err) {
// Error in connecting
context.log.error(err);
context.res.status = 500;
context.res.body = "Error connecting to Azure Synapase";
context.done();
} else {
// Connection succeeded
connection.execSql(request);
}
});
}```
解决方案
这应该工作...
const Connection = require('tedious').Connection;
const Request = require('tedious').Request;
const TYPES = require('tedious').TYPES;
const config = {
server: "SQL pool endpoint goes here",
authentication: {
type: "azure-active-directory-msi-app-service"
},
options: {
encrypt: true,
database: "pool name goes here",
port: 1433
}
}
var connection = new Connection(config);
这假定您已将托管标识适当地分配为 SQL 池中的外部用户。我也有此更改的 PR,您可以在此处跟踪
推荐阅读
- laravel - 在 laravel 6 中获取查询字符串
- python - 如何在 django rest 框架中显示基于函数的视图端点
- npm - 通过 appium & 命令启动 appium 服务器或仅使用 appium 之间有什么区别吗
- python - 是否有 Pandas 解决方案(例如:使用 numba 或 Cython)来使用索引、MultiIndexed DataFrame 进行“转换”/“应用”?
- python - from django.utils import 6 Importerror: cannot import name 6
- php - 未在 PHP 中创建数组
- mongodb - 如何在 mongodb 聚合中同时计算总文档和分组计数?
- python - 散景:如何在图像图中添加图例和自定义颜色边界?
- c - 部分调整位图文件大小 - 放大有效,但缩小无效
- python - Django 中的类别、子类别和产品