1

Ich habe eine Ansicht in BigQuery, die Felder aus verschiedenen Datasets und Tabellen enthält, jetzt möchte ich diese Ansicht durch mein Google-Skript abfragen. Was ist die richtige Vorgehensweise?Wie man eine BigQuery-Ansicht von BigQuery-APIs abfragt

Eigentlich habe ich eine separate Tabelle in bigquery erstellt und Abfrage der Tabelle statt der Ansicht, aber ich brauche Ansicht als Ansicht wird aktualisiert, wenn die Abhängigkeitstabellen aktualisiert werden.

Wenn ich die Tabelle verwenden, funktioniert es gut, aber bei Ansicht unten Fehler Ich erhalte:

Exception: Response Code: 404. Message: Not Found. 

BigQuery die api das Ergebnis der Abfrage zurückzukehren.

try { 
    var job = BigQuery.newJob(); 
    var config = BigQuery.newJobConfiguration(); 
    var queryConfig = BigQuery.newJobConfigurationQuery(); 
    queryConfig.setQuery(sql); 
    queryConfig.setMaximumBillingTier(5); 

    config.setQuery(queryConfig); 
    job.setConfiguration(config); 

    var jobid = BigQuery.Jobs.insert(job, projectNumber).jobReference; 
    queryResults = BigQuery.Jobs.getQueryResults(projectNumber, jobid.jobId); 

    } 
    catch (err) { 
    Logger.log(err); 
    Browser.msgBox(err); 
    return; 
    } 


    // Check on status of the Query Job : MONTHLY 
    while (queryResults.getJobComplete() == false) { 
    try { 
     queryResults = BigQuery.Jobs.getQueryResults(projectNumber, queryResults.jobId); 
     //queryResults = BigQuery.Jobs.getQueryResults(projectNumber, job.id); 
    } 
    catch (err) { 
     Logger.log(err); 
     Browser.msgBox(err); 
     return; 
    } 
    } 
    return queryResults; 

Wenn ich meinen ersten Versuch Klausel Kommentar und unter einem

try { 
    var queryRequest = BigQuery.newQueryRequest(); 
    queryRequest.setQuery(sql).setTimeoutMs(100000); 
    queryResults = BigQuery.Jobs.query(queryRequest, projectNumber); 
    //Browser.msgBox(queryResults); 
    } 
    catch (err) { 
    Logger.log(err); 
    Browser.msgBox(err); 
    return; 
    } 

verwenden dann geht es mir

geben
Exception: Query exceeded resource limits for tier 1. Tier 3 or higher required. 
+0

Es sollte keinen Unterschied zwischen Ansicht und Tabelle wie Abfragen geben, alle sollten gültige SQL-Abfragen sein. Vielleicht kommt dein Fehler von woanders her. – Pentium10

+0

@ Pentium10, stimme ich zu, aber ich bekomme diesen Fehler nur, wenn ich den Tabellennamen ändern, um den Namen anzuzeigen – ashishk

+0

Post the SQL vielleicht gibt es ein Problem dort. – Pentium10

Antwort

0

Es sieht aus wie die ‚configuration.query.maximumBillingTier‘ Eigenschaft nicht immer festgelegt, wenn Sie den Job einfügen. Die Methode der Verwendung von 'JobConfigurationQuery' und anderen Klassen scheint aufgegeben worden zu sein, da sie in den aktuellen Dokumenten nicht erwähnt werden und ich musste auf die Wayback Machine zurückgreifen, um find them zu verwenden.

Die letzte verfügbare document vom 11/12/2013 definiert nur Getter und Setter für einige Konfigurationseigenschaften, und 'maximumBillingTier' gehört nicht dazu.

Ich würde vorschlagen, die Anforderung Eigenschaften wie in den Anwendungsbeispielen aus der current documentation manuell getan, anstatt sich auf die "alten" Objekt Konstruktoren, wie sie nur zu Kompatibilitätszwecken übrig bleiben und sind unvollständig.

Der Grund, aus dem eine Ansicht eine höhere Verrechnungsstufe als eine Tabelle erfordert, liegt daran, dass eine Sicht nur eine logical table ist und die Abfragen, die die Sicht definieren, erneut ausgeführt werden müssen, wenn die Sicht selbst abgefragt wird.

Verwandte Themen