2016-05-06 2 views
1

Ich verwende die Java-API, um das Schema von einer Abfrage mit einem Trockenlauf zu erhalten, aber das Schema, das ich zurückerhalten NULL-Felder, wenn sie eigentlich erforderlich sein sollten.Schema aus Dry-Run-Flags erforderlich Felder als Nullable

Zum Beispiel mit dieser Abfrage:

SELECT word FROM `bigquery-public-data.samples.shakespeare` 

Auch wenn das „Wort“ Feld in der Tabelle erforderlich ist, das Ergebnis, das ich

com.google.api.services.bigquery.model.TableSchema = 
{"fields":[{"mode":"NULLABLE","name":"word","type":"STRING"}]} 

Ist das geschehen soll zurück ist bekommen?

Antwort

1

Ja, das kann passieren - Abfrageergebnisse können unterschiedliche NULLABLE vs. REQUIRED vom Tabellenschema haben, auch wenn die Abfrage trivial nur Felder auswählt. Im Allgemeinen ist die Verbreitung der Spaltennullierbarkeit fragil, daher ist es wahrscheinlich besser, sich nicht darauf zu verlassen.

P.S. Es sieht so aus, als ob Sie Standard-SQL https://cloud.google.com/bigquery/sql-reference/ verwendet haben (obwohl ähnliche Dinge auch mit Legacy-SQL passieren können).

+0

Ich denke, das Schema aus der Abfrage dry-run ist nur für Standard-SQL verfügbar - zuvor erhielten wir das Schema durch Erstellen einer Sicht, die korrekte Felder korrekt beibehalten. Können Sie näher ausführen, wie die Abfrageergebnisse Nullen für erforderliche Felder enthalten können? Und gäbe es eine andere Möglichkeit, dasselbe Schema wie die Ansicht zu erhalten (da Ansichten für Standard-SQL noch nicht unterstützt werden)? –

+0

Lassen Sie mich anders fragen - warum interessiert es Sie, ob es als Required oder NULLABLE markiert wird? Was ändert sich in Ihrer Bewerbung? –

+0

Mein Team erstellt eine typsichere Scala-API um den großen Abfrageclient, und ein Teil unseres Ansatzes besteht darin, Felder mit Nullwert auf Scala-Optionstypen abzubilden. Dies bedeutet wiederum, dass Benutzer dieser typsicheren API Optionstypen für Felder sehen, von denen sie erwarten, dass sie benötigt werden. Die Anwendungen können natürlich frei die Option auspacken, aber es wäre eine Quelle der Verwirrung und vereitelt den Zweck der Typsicherheit etwas. Mit Legacy-SQL haben wir das Schema erhalten, indem wir eine Sicht aus der Abfrage erstellt haben, die benötigte Felder erhalten hat. Aber jetzt, wenn Sie einen Trockenlauf verwenden, werden die erforderlichen Felder als Nullwert zurückgegeben, sodass alles eine Option ist. –

Verwandte Themen