GOOGLE ADS

Freitag, 15. April 2022

Wie kann ich CSV-Daten mit Zeilenumbrüchen in ihren Werten in eine GCloud Big Query-Tabelle importieren?

Mein bq loadBefehl und Fehler

$ bq load --replace --source_format=CSV --autodetect temp.BQTable./source.csv
Upload complete.
Waiting on bqjob_123... (0s) Current status: DONE
BigQuery error in load operation: Error processing job 'my-project-id-123:bqjob_123': Error
while reading data, error message: Error detected while parsing row starting at position: 333. Error: Missing close
double quote (") character.
Failure details:
- Error while reading data, error message: CSV processing encountered
too many errors, giving up. Rows: 0; errors: 1; max bad: 0; error
percent: 0

Excel und mein node.js-Modul für die Csv-Serialisierung können Daten mit Werten mit Zeilenumbrüchen problemlos verarbeiten.

Papaparse, mein npm-Modul zum Serialisieren, verwendet '\r\n'als Standard-Neuzeile zum Trennen von Zeilen, sodass es dort keine Mehrdeutigkeiten geben sollte.

Hier sind einige Beispiel-CSV-Daten, dh source.csv

id,name
1,"this value
includes a newline"

bq- und Cloud SDK-Versionen

$ gcloud components update
Your current Cloud SDK version is: 289.0.0
You will be upgraded to version: 337.0.0
┌─────────────────────────────────────────────────────────────────────────────┐
│ These components will be updated. │
├─────────────────────────────────────────────────────┬────────────┬──────────┤
│ Name │ Version │ Size │
├─────────────────────────────────────────────────────┼────────────┼──────────┤
│ BigQuery Command Line Tool │ 2.0.67 │ < 1 MiB │
│ BigQuery Command Line Tool (Platform Specific) │ 2.0.65 │ < 1 MiB │
│ Cloud SDK Core Libraries │ 2021.04.16 │ 18.0 MiB │
│ Cloud SDK Core Libraries (Platform Specific) │ 2021.03.12 │ < 1 MiB │
│ Cloud Storage Command Line Tool │ 4.61 │ 3.9 MiB │
│ Cloud Storage Command Line Tool (Platform Specific) │ 4.59 │ < 1 MiB │
│ gcloud cli dependencies │ 2021.04.16 │ 10.8 MiB │
│ gcloud cli dependencies │ 2021.04.16 │ < 1 MiB │
└─────────────────────────────────────────────────────┴────────────┴──────────┘

Ich war auf Version 289, weil sie eine neuere Version gepatcht haben, damit Sie keine Datei (CSV, JSON usw.) mit einer Größe von 100 MB oder mehr in BQ importieren könnenbq load:(


Lösung des Problems

Remove all newline and carriage return characters from all string values in csv.

Javascript

const _ = require('lodash');
const rows = [{ id: 1, name: `this value
includes a newline`
}];
rows.forEach(row => {
return _.mapValues(row, value => typeof value === 'string'
? value.replace(/[\r\n]+/g, ' ')
: value
);
});

Dies ist keine gute Lösung, da Daten verworfen werden und davon ausgegangen wird, dass diese Zeilenumbrüche nicht wichtig waren. Hoffen wir, dass es keine Zeilenumbrüche in Ihren PKs oder fremden Feldern gibt.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...