如何在 node.js 环境中将查询语句传递给 bigquery

Posted

技术标签:

【中文标题】如何在 node.js 环境中将查询语句传递给 bigquery【英文标题】:How to pass query statement to bigquery in node.js environment 【发布时间】:2019-03-12 06:26:00 【问题描述】:

大查询时,SQL语句中函数的参数 我想通过将 sql 语句作为 @ 变量名插入来更新它的结果。 但是,没有方法支持 node.js。

对于python,有类似下面例子的方法。 可以使用函数的参数作为@变量名。

query = "" "
SELECT word, word_count
FROM `bigquery-public-data.samples.shakespeare`
WHERE corpus = @ corpus
AND word_count> = @min_word_count
ORDER BY word_count DESC;"" "
query_params = [
bigquery.ScalarQueryParameter ('corpus', 'STRING', 'romeoandjuliet'),
bigquery.ScalarQueryParameter ('min_word_count', 'INT64', 250)]
job_config = bigquery.QueryJobConfig ()
job_config.query_parameters = query_params

相关文件: https://cloud.google.com/bigquery/docs/parameterized-queries#bigquery-query-params-python

我想征求意见。

【问题讨论】:

提供的链接中没有 javascript 示例的事实并不意味着通过 node.js 中的 javascript 客户端库不支持 @。 @ 是 bigquery 端的 sql 进程的属性。请使用 javascript sql 客户端尝试此操作,如果它不起作用,请发布您收到的代码和错误消息...祝您好运。 使用这个 [链接] (cloud.google.com/bigquery/docs/reference/rest/v2/…) 解释如何使用参数对象设置 job.query 一种选择是使用API​​通过节点jscloud.google.com/bigquery/docs/…进行连接和查询(你可以在API explorer中尝试) 【参考方案1】:

当您使用选项中的 params 键传递参数化查询时,BigQuery node.js 客户端支持参数化查询。刚刚更新了the docs 以显示这一点。希望这会有所帮助!

例子:

const sqlQuery = `SELECT word, word_count
      FROM \`bigquery-public-data.samples.shakespeare\`
      WHERE corpus = @corpus
      AND word_count >= @min_word_count
      ORDER BY word_count DESC`;

const options = 
  query: sqlQuery,
  // Location must match that of the dataset(s) referenced in the query.
  location: 'US',
  params: corpus: 'romeoandjuliet', min_word_count: 250,
;

// Run the query
const [rows] = await bigquery.query(options);

【讨论】:

以上是关于如何在 node.js 环境中将查询语句传递给 bigquery的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js 子进程模块中将消息和标准输出从子进程传递给父进程?

在 node.js 中将数组传递给玉模板时遇到问题

如何在 Makefile 规则中将 env 变量传递给 shell 脚本

如何在 node.js 中要求一个文件并在请求方法中传递一个参数,而不是传递给模块?

如何在Javascript中将查询字符串传递给Google表格API v4

Node.js如何将geojson从mongodb传递给我可以在前端使用的对象