我需要使用自定义对象数组更新BigQuery中的现有表。我正在使用Node.js和以下客户端库:https://github.com/googleapis/nodejs-bigquery
假设我有一个包含两个“STRING”类型列的表,要更新它,我使用以下代码。
import BigQueryConnection from "./utilities/BigQuery.connection";
const data = [
{
id: "1",
country: "Germany"
},
{
id: "2",
country: "France"
},
]
const tableId = 'test_dataset.test_table';
const mergeQuery = `
MERGE ${tableId} t
USING UNNEST(@rows) s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET
id = s.id,
country = s.country
WHEN NOT MATCHED THEN
INSERT (id, country) VALUES (s.id, s.country)`;
const options = {
query: mergeQuery,
params: {
rows: data
},
types: {
id: 'STRING',
country: 'STRING',
},
useLegacySql: false
};
const response = await BigQueryConnection.bigquery.createQueryJob(options);
const job = response[0];
const [rows] = await job.getQueryResults(job);
console.log(rows)
它运行良好,但不时我的数据来这样:
const data = [
{
id: "1",
country: null
},
{
id: "2",
country: "France"
},
]
Error: Parameter types must be provided for null values via the 'types' field in query options.
即使提供了参数类型,错误仍然存在。是我遗漏了什么,还是这不适用于大查询?
1条答案
按热度按时间j13ufse21#
我用下面的结构创建了我这边的脚本:
query.js
文件:它在我这边工作正常。
rows
参数被正确地传递给了我的查询null
字段上测试了合并查询,它工作正常package.json
文件:要获得选项的详细信息和参考文档,请查看link。