【发布时间】:2017-10-05 05:07:08
【问题描述】:
在以下简单示例中,“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);
});
【问题讨论】: