使用 JS 的服务帐户调用 Google bigquery

Posted

技术标签:

【中文标题】使用 JS 的服务帐户调用 Google bigquery【英文标题】:calling Google bigquery with service account from JS 【发布时间】:2014-04-09 21:12:03 【问题描述】:

我使用下面的代码通过使用客户帐户从 JS 调用带有图表的 Gogole bigquery。 如何为 Google 服务帐户配置相同的脚本,例如我也有 p12 密钥,但我可以在哪里传递此密钥信息。

     <html>
<head>
<script type="text/javascript" src="https://apis.google.com/js/client.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
    google.load('visualization', '1',  packages: ['geochart'] );
</script>
<script>
    // UPDATE TO USE YOUR PROJECT ID AND CLIENT ID
    var project_id = 'xxxxx';
    var client_id = 'xxx.apps.googleusercontent.com';

    var config = 
        'client_id': client_id,       
        'scope': 'https://www.googleapis.com/auth/bigquery'
    ;

    function runQuery() 
        var request = gapi.client.bigquery.jobs.query(
            'projectId': project_id,
            'timeoutMs': '30000',
            'query': 'SELECT state, AVG(mother_age) AS theav FROM [publicdata:samples.natality] WHERE year=2000 AND ever_born=1 GROUP BY state ORDER BY theav DESC;'
        );
        request.execute(function (response) 
            var stateValues = [["State", "Age"]];
            $.each(response.result.rows, function (i, item) 
                var state = item.f[0].v;
                var age = parseFloat(item.f[1].v);
                var stateValue = [state, age];
                stateValues.push(stateValue);
            );
            var data = google.visualization.arrayToDataTable(stateValues);
            var geochart = new google.visualization.GeoChart(
                document.getElementById('map'));
            geochart.draw(data,  width: 556, height: 347, resolution: "provinces", region: "US" );
        );
    

    function auth() 
        gapi.auth.authorize(config, function () 
            gapi.client.load('bigquery', 'v2', runQuery);
            $('#client_initiated').html('BigQuery client initiated');
        );
        $('#auth_button').hide();
    
</script>
</head>

<body>
<h2>Average Mother Age at First Birth in 2000</h2>
<button id="auth_button" onclick="auth();">Authorize</button>
<button id="query_button" style="display:none;" onclick="runQuery();">Run Query</button>
<div id="map"></div>
</body>
</html>

【问题讨论】:

我从 google bigquery 文档中了解到 - 由于 JS 的安全原因,我们无法使用服务帐户。 【参考方案1】:

我从 google bigquery 文档中了解到 - 由于 JS 的安全原因,我们无法使用服务帐户。

【讨论】:

以上是关于使用 JS 的服务帐户调用 Google bigquery的主要内容,如果未能解决你的问题,请参考以下文章

服务帐户可以调用 Google Apps Script Execution API 吗?

使用服务帐户通过 OAuth 2.0 调用 v3 Google 日历 API 时出现“需要登录”401 未经授权的消息

使用服务帐户插入 Google 日历条目

如何在 Google Apps 脚本中使用服务帐户对 Google 表格进行身份验证

使用服务帐户 Google BigQuery API 时出现登录要求错误

使用 REST API 向 Google Cloud Platform 上的服务帐户添加角色