Wir verwenden TableData.insertAll mit einem TemplateSuffix und häufige 503 Fehler mit unserem Nutzungsmuster.TableData.insertAll mit templateSuffix - häufige 503 Fehler
Wir setzen den templateSuffix basierend auf zwei Informationen - dem Namen des eingefügten Ereignisses und den Daten des einzufügenden Ereignisses. Z.B. "NewPlayer20160712". Die Tabellen-ID ist auf "Ereignisse" festgelegt.
In den meisten Fällen funktioniert dies wie erwartet, aber relativ oft wird es fehlschlagen und einen Fehler zurückgeben. Ungefähr 1 von 200 Inserts wird fehlschlagen, was viel zu oft für das erwartete Verhalten erscheint.
Der Kern unserer Veranstaltung Einnahme Service sieht wie folgt aus:
//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]);
Ein typischer Fehler würde wie folgt aussehen:
{
"code": 503,
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "Error encountered during execution. Retrying may solve the problem."
}
]
}
Der Ressourcenteil für den insertAll, die wie folgt aussieht versagt:
{
"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"
}
}
]
}
Wir haben festgestellt, dass, wenn wir vermeiden, den Namen des Ereignisses in der Suffix (z.B. der NewPlayer Teil) und stattdessen nur das Datum als Suffix haben, dann erleben wir diese Fehler nie.
Gibt es eine Möglichkeit, dass dies zuverlässig funktioniert?