我们正在使用带有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部分),而只是将日期作为后缀,那么我们从未遇到过这些错误。
有什么方法可以让它可靠地工作?
答案 0 :(得分:1)
发生后端错误,我们通常会看到来自10000个请求的5个。我们只是重试,我们有更稳定的速率,我们可以提供一个可重构的用例,我们在Bigquery问题跟踪器上放票。这样,如果我们的项目出现问题,可以进行调查。