在下面的简单示例中,foo.csv'是一个简单的3列表。 第一列是行号。第二列和第三列是字符串。
我使用模式自动检测创建表。 (我还尝试创建一个具有类似结果的特定模式的表。) 然后我使用table.getRows查询它。 返回的行不是按插入顺序排列的。 我花了一段时间来弄清楚顺序,因为第一列既没有插入顺序也没有数字顺序。
排序顺序是 - 第二列的长度 - 按字母顺序排列第二列 - 第三列的长度 - 按字母顺序排列第三列
就我而言,这是完全没用的。 我怎样才能A)保留插入顺序或B)按第一列排序? 这似乎是一个相对简单的请求,但我找不到任何文档。const gcloud = require('google-cloud');
const storage = gcloud.storage();
const bigquery = gcloud.bigquery({ projectId: projectId });
const async = require('async');
const bucket = storage.bucket(storage.bucket);
const file = bucket.file('foo.csv');
const dataset = bigquery.dataset('dataset1');
const table = dataset.table('table1');
async.waterfall([
(callback) => {
table.import(file, {
autodetect: true,
maxBadRecords: 500000,
writeDisposition: 'WRITE_TRUNCATE',
}, callback);
},
(job, apiResponse, callback) => {
async.retry({
times: 20000,
interval: 2000
}, (retryCallback, results) => {
job.getMetadata((err, metadata) => {
let status = metadata.status.state;
retryCallback((status == 'DONE') ? null : status);
});
}, callback);
},
(callback) => {
table.getRows({
autoPaginate: false,
maxResults: 100
}, callback);
},
(rows, nextQuery, info, callback) => {
rows.forEach((row) => {
console.log(JSON.stringify(row));
});
callback(null);
}
], (err) => {
console.log(err);
});
答案 0 :(得分:1)
您可以使用table.getRows
来传递SQL查询,而不是使用table.query
,您可以使用Order By
子句指定排序。