如何使用Node.js修补BigQuery视图

时间:2019-06-07 16:19:23

标签: node.js google-api google-bigquery google-cloud-functions

我在Node.js v8中编写了一个使用@google-cloud/bigquery v1.3.0库的Cloud Function。

我喜欢它,我能够执行BigQuery更改,例如使用下面的非常简单的代码创建视图,而无需担心诺言并且它是同步的。

const bigquery = new BigQuery({projectId: 'my-project'});

const options = {
    view: {
        query: 'SELECT * FROM `my-project.my-datatset.my-table`',
        useLegacySql: false
    }
};

results = await bigquery
 .dataset('my-datatset')
 .createTable('my-view', options);

但是我一直无法弄清楚如何修改此代码以执行 patch 操作。我希望可以使用非常相似的语法,但找不到。例如。以下示例均无效:

//bigquery.dataset(datasetId).patchTable(viewId,options);
//bigquery.dataset(datasetId).table(viewId).patch(options);
//bigquery.dataset(datasetId).tables(viewId).patch(options);

我可以使用the rest API through Googles reference documents进行补丁操作。但是我只是找不到与上述方法一致的代码解决方案。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此解决方案较长且异步,但似乎可以使用。如果有人遇到相同的问题

var {google} = require('googleapis');
var bigQuery = google.bigquery("v2")

google.auth.getApplicationDefault(function(err, authClient) {
    if (err) {
        //Handle error
    }

    if (authClient.createScopedRequired && authClient.createScopedRequired()) {
        var scopes = [
            //Either scope is sufficient according to the spec.
            //https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/patch
            'https://www.googleapis.com/auth/cloud-platform',
            'https://www.googleapis.com/auth/bigquery'
        ];  
        authClient = authClient.createScoped(scopes);
    }

    var request = {
        projectId: 'my-project',
        datasetId:'my-datatset',
        tableId:'my-view',

        resource: {
            view: {
                query: 'SELECT * FROM `my-project.my-datatset.my-table`',
                useLegacySql: false
            }
        },
        // Auth client
        auth: authClient
    };

    tables = bigQuery.tables;
    tables.patch(request, function(err, response) {
        if (err) {
            //Handle error
        } else {
            //Print response
        }
    });  
});