从 Snowflake 获取数据到 nodejs
2022-01-05
2661
我正在尝试使用 Snowflake 和 Nodejs 设计一个 API。为此,我使用了以下内容:
Express ejs snowflake-sdk(nodejs 模块)
我想从 snowflake 获取数据并将其显示在我的 ejs 网页上。如果有人使用 nodejs 和 snowflake 获取数据并将其填充到网页上,请帮忙。
这是我的 server.js 文件
const express = require("express");
const app= express();
const sql = require("./snowflake");
app.use(express.static("public"));
app.use(express.urlencoded({ extended: true}));
app.set("view engine","ejs");
app.get("/", function(request,response){
response.render("index");
});
app.get("/request/:core", async function(request,response){
let core=await sql.getCore(request.params.core_name);
response.render("request",{request: core});
});
const http = require('http');
const port=3000;
const server=http.createServer(function(req,res){
})
const listener = app.listen(port,function(error){
if(error){
console.log("Something went wrong due :", error);
}
else{
console.log('Server is listening port '+port);
}
})
这是我的 database.js 文件。我可以连接到 snowflake 并运行查询,但不明白如何在 ejs 网页上获取查询结果。
const { initParams } = require('request');
const sql = require('snowflake-sdk');
const connection = sql.createConnection({
account: 'account_name',
authenticator: 'SNOWFLAKE',
username: 'username',
password: 'password',
database: 'database',
schema: 'schema'
});
module.exports.getCore = async() =>{
connection.execute({
sqlText: 'Select column from Table_name',
complete: async function(err,stmt,rows){
let pool= await sql.connect();
return rows;
}
})
}
2个回答
您可以尝试比较一个示例应用程序,它是用 node.js 编写的。它是一个 Citi Bike 仪表板,可让用户查看一段时间内和不同天气条件下的自行车使用情况。源代码可在 GitHub 上找到。
FKayani
2022-01-05
您的异步函数 getCore() 在您的查询语句从 Snowflake 完成之前返回。
按如下方式重写您的函数:
module.exports.getCore = async() =>{
return new Promise((resolve, reject) => {
connection.execute({
sqlText: 'Select column from Table_name',
complete: async function(err,stmt,rows){
let pool= await sql.connect();
resolve(rows);
}
}
})
另请注意,每个请求的数据大小限制为 16 MB( https://docs.snowflake.com/en/developer-guide/node-js/nodejs-driver-execute )。如果预计数据会更大,那么您将需要分批执行查询或将数据流回。
Phong Nguyen
2023-08-31