【问题标题】:Sort order table.getRows排序顺序表.getRows
【发布时间】: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);
});

【问题讨论】:

    标签: sorting google-bigquery


    【解决方案1】:

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

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

    【讨论】:

    • 这行得通,它解决了我眼前的问题。但是有没有办法保留插入顺序,以涵盖我没有可以排序的列的情况?
    • 我不知道任何方式,BigQuery 在幕后使用列并组织数据以提高查询效率。您可以添加插入时间列,但您可能必须手动解析 csv 文件并添加此信息。
    猜你喜欢
    • 2014-02-14
    • 2013-05-07
    • 2019-04-05
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2018-09-15
    • 2021-08-10
    相关资源
    最近更新 更多