Bigquery — Обработка двойных кавычек и Разделитель полей каналов в CSV (Федеративная таблица)

# #csv #google-bigquery #google-cloud-storage

Вопрос:

В настоящее время я сталкиваюсь с проблемами загрузки данных в большой запрос или даже создания объединенной таблицы, поскольку входящие данные разделены | символом канала с экранированными двойными кавычками на полях внутри файла

Примеры данных (также пытался избежать значений в двойных кавычках с двойными двойными кавычками, т. е. "" на уровне полей)

 13|2|""Jeeps, Trucks amp; Off-Roa"|"JEEPSTRU"
 

Создать DDL

 CREATE OR REPLACE EXTERNAL TABLE `<project>.<dataset>.<table>`
WITH PARTITION COLUMNS (
    dt DATE
    )
OPTIONS (
     allow_jagged_rows=true,
     allow_quoted_newlines=true,
     format="csv",
     skip_leading_rows=1,
     field_delimiter="|",
     uris=["gs://path/to/bucket/table/*"],
     hive_partition_uri_prefix='gs://path/to/bucket/table'
)
 

Запрос

 SELECT
  *
FROM
  `<project>.<dataset>.<table>`
WHERE field_ like '%Jeep%'
 

Ошибка

 Error while reading table: <project>.<dataset>.<table>, error message: Error detected while parsing row starting at position: 70908. Error: Data between close double quote (") and field separator.
 

Однако это работает, если я создаю таблицу с пустым символом кавычки quote="" , что затрудняет фильтрацию в SQL-запросе

введите описание изображения здесь

Мне нужно field_ , чтобы данные были загружены как "Jeeps, Trucks amp; Off-Roa

Я попытался найти различную документацию и вопрос о стековом потоке (так как все старое или не работает — или мне не повезло) Я снова задаю этот вопрос.

У меня есть очень простой вопрос > Как лучше избежать двойных кавычек в столбце для большой таблицы запросов, чтобы избежать этой проблемы без предварительной обработки исходных данных csv/psv?

Ответ №1:

Это не проблема с внешней таблицей или bigquery, а скорее функция CSV-файлов. У меня было подобное однажды, когда я загружал данные в таблицу в пользовательском интерфейсе. Я нашел некоторые источники(кстати, которые я не могу найти прямо сейчас), в которых двойные кавычки следует использовать дважды ( "" ) в CSV-файле, чтобы получить такое поведение, например, с помощью вашего примера:

 13|2|"""Jeeps, Trucks amp; Off-Roa"|"JEEPSTRU"
 

Я проверил это на вашем образце. Когда я загружал данные в таблицу из csv, я получил ту же ошибку. И после использования выше это сработало, как и ожидалось. Значение поля результата равно:

 "Jeeps, Trucks amp; Off-Roa
 

Я полагаю, что это сработает и для вас.

ПРАВКА: Я нашел это в Основных правилах CSV в Википедии:

  • Каждый из встроенных символов с двойными кавычками должен быть представлен парой символов с двойными кавычками.

1997,Ford,E350,"Super, ""luxurious"" truck"

Комментарии:

1. Спасибо, это сработало как заклинание. в некоторых полях было нечетное количество кавычек при применении двойной двойной кавычки > Я думаю, что это было из-за некоторого ограничения поля экспорта, установленного в источнике. теперь понятно, как избежать кавычек 👍