0
在以下簡單示例中,'foo.csv'是一個簡單的3列表。 第一列是行號。第二和第三列是字符串。排序順序table.getRows
我使用模式自動檢測創建表。 (我也嘗試創建一個具有類似結果的特定模式表。) 然後,我使用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);
});
這樣的作品,它解決了我的眼前的問題。但是,有沒有辦法保持插入的順序,以涵蓋我沒有可以分類的列的情況? –
我不知道有什麼方法,在幕後BigQuery使用列和組織數據以使查詢有效。您可以添加插入時間列,但您可能必須手動解析csv文件並添加此信息。 –