融合表中不能更新超过30行?

时间:2015-06-02 14:10:01

标签: javascript sql google-fusion-tables

我可以一次更新30行,但我尝试在下面的代码更新融合表,但我无法更新超过30条记录。如何解决这个问题呢 ?

如果谷歌API有任何限制 - 融合表。如何避免融合表限制。

更新超过30条记录时,我的误差低于此值。

503 (Service Unavailable)

Object {code: 503, data: Array[1], message: "Internal error. Please try again.", error: Object}

以下是我的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Authorization Request</title>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
<script type="text/javascript" src="https://apis.google.com/js/client.js"></script>
    <script type="text/javascript">
        function auth() {
            var config = {
                'client_id': '607567025394-rmte05500pvsoj12dsrie1cbei5te506.apps.googleusercontent.com',
                'scope': 'https://www.googleapis.com/auth/fusiontables',
                'immediate': false
            };
            gapi.auth.authorize(config, function () {
                console.log('login complete');
                console.log(gapi.auth.getToken());
            });
        }

        function Update_row() {
            //First authenticate user:
            auth();

            //Set Google Development colsole API key
            gapi.client.setApiKey('AIzaSyAnEhw4Y7n5V7bN226wWo0tHs0Bd7jAzxA');

            //Fusion table URL : https://www.google.com/fusiontables/DataSource?docid=1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o
            gapi.client.load('fusiontables', 'v2', function () {
                var i;
                for (i = 0; i < 50; i++) {

                    var selectQry = "SELECT ROWID FROM 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o WHERE Number = '" + i + "'";

                    gapi.client.fusiontables.query.sql({ sql: selectQry }).execute(function (response) {
                        console.log(response);

                        //To get ROWID:
                        var getRowID = response["rows"][0][0];


                        //Update Fusion Table values - Based on selecred ROWID values :
                        var updateQry = "UPDATE 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o SET col2 = 'aaa', col3='2015/01/01' WHERE ROWID = '" + getRowID + "'";
                        gapi.client.fusiontables.query.sql({ sql: updateQry }).execute(function (response) {
                            console.log(response);
                        });
                    });
                }
            });
        }
    </script>
</head>

<body>
<button onclick="Update_row();">Update Fusion Table Rows</button>
</body>
</html>

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您有50个相同的查询,这不是一个好的解决方案。这可能是因为谷歌表格响应此错误。您应该使用sql构造WHERE BETWEEN X and Y

在您的情况下,更好的解决方案是:

var selectQry = "SELECT ROWID FROM 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o WHERE Number BEETWEN 1 and 50";

而不是

var selectQry = "SELECT ROWID FROM 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o WHERE Number = '" + i + "'";

此查询返回数组中的结果。之后你可以使用这个数组。

您也多次执行UPDATE次。最佳解决方案对您选择的所有行执行此操作。所以你应该使用WHERE ROWID IN (id1,id2,id3,...,idn)

在你的情况下,你应该像这样准备你的查询:

var updateQry = "UPDATE 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o SET col2 = 'aaa', col3='2015/01/01' WHERE ROWID IN (id1,id2,id3,...,idn)";

而不是

var updateQry = "UPDATE 1ATc4raFfvVSJriqgIS2qBHE5GQY4wioDA13LrQ5o SET col2 = 'aaa', col3='2015/01/01' WHERE ROWID = '" + getRowID + "'";

答案 1 :(得分:1)

你正在达到你的配额。请参阅the docs,了解每个表每分钟的写请求数。

您应该使用某种限制机制或importRows方法。 如果你问我,后者会更好。