2016-04-26 17 views
3

Ich habe Probleme beim Erstellen einer einfachen Tabelle mit Avro als Importformat. Ich möchte eine typische Tabelle mit N Spalten primitiver Datentypen erstellen, zum Beispiel eine Tabelle mit den Spalten c1 STRING und c2 INTEGER.Einfügen von Zeilen mit mehreren Spalten in BigQuery mit Avro

Ich benutze Schema wie diese

{ 
    "type": "record", 
    "name": "x", 
    "fields": [ 
     { 
      "name": "c1", 
      "type": "string" 
     }, 
     { 
      "name": "c2", 
      "type": "int" 
     } 
    ] 
} 

Dies führt in eine Spalte mit dem Namen root vom Typ RECORDc1 und c2 verschachtelt zu haben.

Wie kann in eine Tabelle importiert werden, die zwei Spalten c1 und c2 mit Avro hat? Oder ist es derzeit möglich, nur Tabellen mit einer Spalte mit dem festen Namen root zu erstellen?

Ich habe versucht, andere Ansätze:

  • Avro Typ array (von string) erstellt eine Spalten mit Namen root vom Typ STRING REPEATED
  • Simplest Schema wie {"type":"string"} mit Namen STRINGroot vom Typ einer Spalte erzeugt. Dieser Ansatz lässt nicht mehr als eine Spalte erstellen und ändert auch nicht den Namen der Spalte.

Antwort

0

Danke für die Rückmeldung. Das Avro-Schema beginnt immer mit einer unbenannten Spalte, die ein primitiver Typ wie ein String oder ein komplexer Typ wie ein Datensatz sein kann. Wir ordnen es nun einer Spalte in BQ zu und fixieren den Namen als "root". Wir werden in Erwägung ziehen, den umschließenden Datensatz auf Root-Ebene zu strippen, wenn dies zu einer allgemeinen Anforderung wird. Aber dann verarbeiten wir den Datensatztyp anders als andere Typen.

Die Lösung besteht nun darin, den Stammdatensatz mit einer Abfrage zu entfernen und in einer anderen Tabelle zu speichern. Oder Sie können die Last und den Strip in einem Schritt durch föderierte Tabellen kombinieren:

bq-Abfrage --external_table_definition = foo :: AVRO = gs: //Ihr_Bucket/path/file.avro* --destination_table your_dataset.your_table " SELECT Wurzel. * FROM foo“

+1

ging ich davon aus, dass JSON und Avro haben die gleichen Eigenschaften und Avro könnte anstelle von JSON verwendet werden, die nicht ein gutes Format in Bezug auf Flächenverbrauch ist. Dies ist nicht der Fall (zumindest jetzt), stattdessen hat Avro diese Einschränkung, dass Sie keine beliebigen Spaltennamen verwenden können. In meinem Fall erwartet unsere Verarbeitungspipeline, dass Spalten bestimmte Namen haben, jetzt kann ich das aufgrund des impliziten Präfixes "root_" nicht erreichen. IMHO ist es eine gültige Benutzeranforderung für eine Analyse-Datenbank, dass Endbenutzer die Spalten frei benennen können. Bitte unterstützen Sie diese Funktion in der Zukunft und dokumentieren Sie die aktuelle Funktion. – codeholic

+1

bisher, mit Root-Stuff - es ist völlig nutzlos überbewertet Feature und Zeitverschwendung! Stammdatensatz wird dort planen zu entfernen, so Benutzer kann vollständig das Schema steuern ?? –

Verwandte Themen