TableData.insertAll with templateSuffix - 经常出现503错误

时间:2016-07-12 18:21:22

标签: google-bigquery

我们正在使用带有templateSuffix的TableData.insertAll,并且我们的使用模式经常遇到503错误。

我们根据两条信息设置templateSuffix - 正在插入的事件的名称和正在插入的事件的数据。例如。 ' NewPlayer20160712&#39 ;.表格ID设置为' events'。

在大多数情况下,这可以按预期工作,但相对经常会失败并返回错误。每200个插入中大约有1个会失败,这对于预期的行为来说似乎太常见了。

我们的事件提取服务的核心如下:

//Handle all rows in rowsBySuffix
async.mapLimit(Object.keys(rowsBySuffix), 5, function(suffix) {
    //Construct request for suffix
    var request = {
        projectId: "tactile-analytics",
        datasetId: "discoducksdev",
        tableId: "events",
        resource: {
            "kind": "bigquery#tableDataInsertAllRequest",
            "skipInvalidRows": true,
            "ignoreUnknownValues": true,
            "templateSuffix": suffix, // E.g. NewPlayer20160712
            "rows": rowsBySuffix[suffix]
        },
        auth: jwt // valid google.auth.JWT instance
    };

    //Insert all rows into BigQuery
    var cb = arguments[arguments.length-1];
    bigquery.tabledata.insertAll(request, function(err, result) {
        if(err) {
            console.log("Error insertAll. err=" + JSON.stringify(err) + ", request.resource=" + JSON.stringify(request.resource));
        }
        cb(err, result);
    });
}, arguments[arguments.length-1]);

典型的错误如下所示:

{
   "code": 503,
   "errors": [
      {
         "domain": "global",
         "reason": "backendError",
         "message": "Error encountered during execution. Retrying may solve the problem."
      }
   ]
}

失败的insertAll的资源部分如下所示:

 {
   "kind": "bigquery#tableDataInsertAllRequest",
   "skipInvalidRows": true,
   "ignoreUnknownValues": true,
   "templateSuffix": "GameStarted20160618",
   "rows": [
      {
         "insertId": "1f4786eaccd1c16d7ce865fea4c7af89",
         "json": {
            "eventName": "gameStarted",
            "eventSchemaHash": "unique-schema-hash-value",
            "eventTimestamp": 1466264556,
            "userId": "f769dc78-3210-4fd5-a2b0-ca4c48447578",
            "sessionId": "821f8f40-ed08-49ff-b6ac-9a1b8194286b",
            "platform": "WEBPLAYER",
            "versionName": "1.0.0",
            "versionCode": 12345,
            "ts_param1": "2016-06-04 00:00",
            "ts_param2": "2014-01-01 00:00",
            "i_param0": 598,
            "i_param1": 491,
            "i_param2": 206,
            "i_param3": 412,
            "i_param4": 590,
            "i_param5": 842,
            "f_param0": 5945.442,
            "f_param1": 1623.4111,
            "f_param2": 147.04747,
            "f_param3": 6448.521,
            "b_param0": true,
            "b_param1": false,
            "b_param2": true,
            "b_param3": true,
            "s_param0": "Im guesior ti asorne usse siorst apedir eamighte rel kin.",
            "s_param1": "Whe autiorne awayst pon, lecurt mun.",
            "eventHash": "1f4786eaccd1c16d7ce865fea4c7af89",
            "collectTimestamp": "1468346812",
            "eventDate": "2016-06-18"
         }
      }
   ]
}

我们注意到,如果我们避免在后缀中包含事件的名称(例如NewPlayer部分),而只是将日期作为后缀,那么我们从未遇到过这些错误。

有什么方法可以让它可靠地工作?

1 个答案:

答案 0 :(得分:1)

发生后端错误,我们通常会看到来自10000个请求的5个。我们只是重试,我们有更稳定的速率,我们可以提供一个可重构的用例,我们在Bigquery问题跟踪器上放票。这样,如果我们的项目出现问题,可以进行调查。

https://code.google.com/p/google-bigquery/