2012-09-14 3 views
7

In dem unten angegebenen Beispiel wird die letzte Zeile nicht hochgeladen. Ich erhalte einen Fehler:Daten zwischen Anführungszeichen und Feldtrennzeichen

Das sieht wie ein Fehler aus, da alle Daten zwischen Rohrsymbol als ein einzelnes Feld behandelt werden sollten.

Schema: one: string, zwei: string, drei: string, vier: string

Hochladen file:

This | is | test only | to check quotes 
second | line | "with quotes" | no text 
third line | with | "start quote" and | a word after quotes 

Die erste und die zweite Zeile über verarbeitet wird. Aber nicht das dritte.


Update:

Kann einige bitte erklären, warum tut die folgende Arbeit außer der dritten Zeile?

This | is | test only | to check quotes 
second | line | "with quotes" | no text 
third line | with | "start quote" and | a word after quotes 
forth line | enclosed | {"GPRS","MCC_DETECTED":false,"MNC_DETECTED":false} | how does this work? 
fifth line | with | {"start quote"} and | a word after quotes 

Es kann einige schöne Erklärung dazu geben. Aus Sicht der Endverbraucher ist das absurd.

+1

Ich habe gerade versucht, das Update und das Beispiel, das Sie gab nicht wirklich funktionieren Wie die meisten CSV-Parsing-Anwendungen berücksichtigt BigQuery standardmäßig doppelte Anführungszeichen (") als ein Feld, das ein Zeichen enthält. Die dritte Zeile wird nicht korrekt gemasked (siehe meine Antwort unten) und die Einnahme wird einen Fehler verursachen. Sie haben folgende Optionen: 1. Ändern Sie den Parameter "configuration.load.quote" in Ihren Aufnahmeanforderungen auf einen anderen Wert als "double-quote" (ein Zeichen, das in Ihren Daten nicht angezeigt wird). 2. Entkomme deine Daten wie unten empfohlen ... zum Beispiel macht Pythons CSV-Klasse dies automatisch. –

+0

Auch wenn es sinnvoll ist, Dinge wie "configuration.load.quote" auf NULL zu setzen, denke ich, dass es sehr wichtig ist, bei der Arbeit mit großen Mengen von CSV-Daten mit Trennzeichen und Feldumschließenden Zeichen zu arbeiten.Es hilft, Fehler in den zugrunde liegenden Daten zu finden und sicherzustellen, dass die Daten, die Sie einlesen, gültig sind. –

Antwort

7

Vom CSV RFC4180 page: „Wenn doppelten Anführungszeichen verwendet werden, Felder einzuschließen, dann ein doppeltes Anführungszeichen in einem Feld erscheint maskiert werden muss es mit einem weiteren Doppel Zitat von vorhergehenden“

Sie wollen wahrscheinlich, dies zu tun:

This | is | test only | to check quotes 
second | line | "with quotes" | no text 
third line | with | " ""start quote"" and " | a word after quotes 

Mehr über unsere CSV-Eingabeformat here.

+4

Hinweis: Sie können das Anführungszeichen ändern, indem Sie das Feld "Anführungszeichen" in der Konfiguration des Ladejobs auf etwas setzen, das Sie nie verwenden werden. –

+1

Wie setze ich ein Zitatfeld im Ladejob? Wenn ich bq load --quote '^' verwende, dann erhalte ich einen Fehler FATAL Flags Parsing Fehler: Unbekanntes Kommandozeilen Flag 'quote' # Wenn ich einen Quote Parameter in ~/.bigqueryrc hinzufüge bekomme ich einen Fehler: Unbekannte Flag Konfiguration .load.quote gefunden in bigqueryrc Datei – shantanuo

+0

Ich denke, "quote" -Parameter wird in der nächsten Version bq Kommandozeilen-Tool hinzugefügt werden. Dieses Problem ist mir so wichtig, dass ich auf die neue Version warten werde! – shantanuo

1

Sie können die anderen Flags auch beim Hochladen der Daten verwenden. Ich benutzte das bq-Tool mit folgenden Flags

bq load -F , --source_format CSV --skip_leading_rows 1 --max_bad_records 1 --format csv -E UTF-8 yourdatset gs://datalocation. 
0

-- Quote funktionierte perfekt.

bq load 
--source_format CSV --quote "" 
--field_delimiter \t 
--max_bad_records 10 
-E UTF-8 
destination table 
Source files