Нет способа ввода данных с \ "в поле в BigQuery - PullRequest
2 голосов
/ 20 сентября 2019

У меня есть десятки тысяч сжатых файлов CSV, которые записываются в S3 каждый день.Они содержат поля, разделенные запятыми, каждое поле заключено в двойные кавычки (независимо от типа данных).Однако двойные кавычки, содержащиеся в поле, экранируются с помощью \ вместо RFC4180 стандарта ", например, так:

header1,header1,header3
"1","Look some text.","43.7"
"2","27\" TV","29.1"
"3","More things","99.0"

Это нормально работает для Amazon Athena или другихпродукты, которые используют десериализаторы, которые позволяют вам указать символ кавычки / escape.Однако BigQuery не может принять эти данные.Я получаю ошибку:

Error: Data between close double quote (\") and field separator.

Когда я пытаюсь, это имеет смысл.Я не могу изменить базовую структуру данных (написанную другой службой), установка для параметра configuration.load.quote неиспользуемого символа приводит к ошибкам синтаксического анализа, и нереально раскручивать экземпляры Cloud SQL, чтобы просто действовать для этого как парсер (яm обрабатывает ТБ данных каждый день).

Я подумал, что установка символа кавычки на \" может сработать, но API BQ допускает только один символ для этого поля.

Как решитьэто?

1 Ответ

1 голос
/ 21 сентября 2019

Я понимаю боль, и спасибо за предоставление дополнительной мотивации!

Как я объяснил в своем посте (https://medium.com/google-cloud/loading-mysql-backup-files-into-bigquery-straight-from-cloud-sql-d40a98281229),, самый простой способ, который я нашел для решения этой проблемы на данный момент, это пойтичерез MySQL.

Другие вопросы по переполнению стека показывают альтернативные пути, такие как предварительная обработка с помощью Dataflow, инструменты bash и / или внутри BigQuery.

Для получения информации о продуктах, пожалуйста, подпишитесь и добавьте этопроблема - добавление ваших комментариев также будет очень ценно:

Чтобы проанализировать внутри BigQuery, попробуйте загрузить каждую строку raw и запустить UDF следующим образом:

SELECT csv.cols[SAFE_OFFSET(0)] a
  , csv.cols[SAFE_OFFSET(1)] b
  ,csv.cols[SAFE_OFFSET(2)] c
  ,csv.cols[SAFE_OFFSET(3)] d
  ,csv.cols[SAFE_OFFSET(4)] e
  ,csv.cols[SAFE_OFFSET(5)] f
FROM (
  SELECT fhoffa.x.parse_csv('hello,"dealing here, with", some \" quoted words, all is fine, good one?,"even a , in between"')  csv
)

Ссылка: https://medium.com/@hoffa/new-in-bigquery-persistent-udfs-c9ea4100fd83

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...