开发者问题收集

从 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 上找到。

更多详情: https://quickstarts.snowflake.com/guide/data_app/#4

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