Sorting 排序顺序表.getRows

Sorting 排序顺序表.getRows,sorting,google-bigquery,Sorting,Google Bigquery,在下面的简单示例中,“foo.csv”是一个简单的3列表。 第一列是行号。第二列和第三列是字符串 我使用模式自动检测创建表。 (我还尝试创建了一个具有类似结果的特定模式的表。) 然后,我使用table.getRows查询它。 返回的行不符合插入顺序。 我花了一段时间才弄清楚顺序,因为它既不是插入顺序,也不是第一列的数字顺序 排序顺序是 -第二列的长度 -按第二列字母顺序排列 -第三列的长度 -按第三列字母顺序排列 这对我来说是完全没有用的。 我如何才能A)保留插入顺序或B)按第一列排序? 这似乎

在下面的简单示例中,“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);
});

您可以使用
table.getRows
来传递一个SQL查询,而不是使用
table.query
,在该查询中,您可以使用
orderby
子句指定排序


这很有效,解决了我眼前的问题。但是有没有办法保留插入顺序,以涵盖我没有可以排序的列的情况?我不知道有什么办法,幕后BigQuery使用列并组织数据以提高查询效率。您可以添加一个插入时间列,但可能必须手动解析csv文件并添加此信息。