【发布时间】:2021-12-27 21:58:50
【问题描述】:
我有一个包含几列的简单 BigQuery 表。其中一列名为my_id(类型为STRING)。我正在像这样查询我的 BigQuery 数据集:
import * as bq from "@google-cloud/bigquery";
const bqdb = new bq.BigQuery();
// ...
const projectId = 'my_project';
const datasetId = "my_dataset";
const tableId = "my_table";
const dbId = [projectId, datasetId, tableId].join('.');
// myIds is an array of strings
const stringedArray = myIds.map((id) => '\'' + id + '\'');
const sql_select_query = `
SELECT my_id
FROM \`${dbId}\`
WHERE my_id IN (${String(stringedArray)})
LIMIT 1
;
`;
const dataset = bqdb.dataset(datasetId);
const destinationTable = dataset.table(tableId);
console.log("Querying database...");
const queryOptions = {
query: sql_select_query,
destination: destinationTable,
write_disposition: "WRITE_APPEND",
priority: 'BATCH',
};
// Run the query as a job
const [job] = await bqdb.createQueryJob(queryOptions);
// Wait for the job to finish.
const results = await job.getQueryResults({maxResults: 500});
const resutsArray = results[0]
此查询将返回整个表(所有行、所有列)。换句话说,这个查询的结果和我写的一样:
const sql_select_query = `
SELECT *
FROM \`${dbId}\`
;
`;
输出的格式类似于成功查询:没有错误消息或警告。但是我所有的条件都被忽略了,即使是LIMIT。
为什么 BigQuery 将整个表转储到响应中?
【问题讨论】: