2016-07-12 8 views
1

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?

Antwort

1

Backend Fehler passieren, sehen wir normalerweise 5 von 10000 Anfragen. Wir versuchen es einfach, und wir haben eine konstantere Rate, und wir können einen rekonstruierbaren Anwendungsfall bereitstellen, indem wir ein Ticket auf den Bigquery Issue Tracker setzen. Auf diese Weise kann, wenn etwas mit unserem Projekt nicht stimmt, es untersucht werden.

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