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