排序顺序table.getRows

时间:2017-10-04 20:15:59

标签: sorting google-bigquery

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

1 个答案:

答案 0 :(得分:1)

您可以使用table.getRows来传递SQL查询,而不是使用table.query,您可以使用Order By子句指定排序。

https://googlecloudplatform.github.io/google-cloud-node/#/docs/bigquery/0.3.0/bigquery/table?method=query