Вопрос по google-bigquery – Задание Big Query завершается с ошибкой «Обнаружен плохой символ (ASCII 0)».

1

У меня есть работа, которая терпит неудачу с ошибкой

Line:14222274 / Field:1, Bad character (ASCII 0) encountered. Rest of file not processed.

Данные сжаты, и я убедился, что в файле нет символа ASCII 0. В файле всего 14222273 строки, поэтому номер строки, который печатается в сообщении об ошибке, находится на одну строку после конца файла. У меня есть другие порции из того же набора данных, которые успешно загружены, поэтому я подозреваю, что это либо ошибка BQ, либо сообщение об ошибке не указывает на основную проблему. Любая помощь в решении этой проблемы будет принята с благодарностью. Благодарю.

>>> data = open("data.csv").read()
>>> chr(0) in data
False
>>> data[-1]
'\n'
@MichaelManoochehri Я протестировал оба сценария. Я создал 3 файла: один с двумя последними строками, один с первой половиной и второй со второй. Я сжал и загрузил все 3, и все они успешно завершены. John Shaw
Привет, Джон: можешь ли ты подтвердить, что несжатый файл не заканчивается завершающим "\ 0"? персонаж? Michael Manoochehri
@MichaelManoochehri Последний байт в файле - это новая строка.>>> chr(0) in open("data.csv").read() False John Shaw
Почти невозможно отладить это без фактических данных. Не могли бы вы взять исходный файл проблемы, распаковать его, разделить на 2 файла, повторно распаковать и повторно загрузить в BigQuery? Кроме того, не могли бы вы создать новый файл, используя только последние 2 строки исходного файла, попытаться повторно принять его и сообщить нам, если вы получили ту же ошибку? Michael Manoochehri

Ваш Ответ

3   ответа
1

Когда вы сжимаете, какую утилиту вы использовали?

Я увидел эту проблему, когда я сжал мой CSV-файл в формате ZIP (в Windows). Google BigQuery, похоже, принимает только формат gzip.

Убедитесь, что вы сжали CSV с помощью gzip. Если вы в окнах7-Zip отличная утилита, которая позволяет вам сжимать в gzip.

В Unix gzip является стандартным.

Я использую gzip 1.3.12 в Ubuntu 11.10. John Shaw
Вы также проверили кодировку символов. Файл должен быть в формате UTF-8. Он также поддерживает еще одну кодировку. Кодировки символов По умолчанию служба BigQuery ожидает, что все исходные данные будут в кодировке UTF-8. По желанию, если у вас есть данные, закодированные в формате ISO-8859-1, вы должны явно указать кодировку при импорте данных, чтобы BigQuery мог правильно преобразовать ваши данные в UTF-8 во время процесса импорта. В настоящее время возможно импортировать данные только в кодировке ISO-8859-1 или UTF-8. Имейте в виду следующее при указании кодировки символов ваших данных:
2

У меня были похожие проблемы, при попытке загрузить в BigQuery сжатый файл (сохранил его в Google Cloud Storage). Это журналы:

File: 0 / Offset:4563403089 / Line:328480 / Field:21: Bad character (ASCII 0) encountered: field starts with:  (error code: invalid)
File: 0 / Offset:4563403089 / Line:328485 / Field:21: Bad character (ASCII 0) encountered: field starts with:  (error code: invalid)
File: 0 / Offset:4563403089 / Line:328490 / Field:21: Bad character (ASCII 0) encountered: field starts with:  (error code: invalid)
File: 0 / Offset:4563403089 / Line:328511 / Field:21: Bad character (ASCII 0) encountered: field starts with:  (error code: invalid)
File: 0 / Offset:4563403089 / Line:328517 / Field:21: Bad character (ASCII 0) encountered: field starts with:  (error code: invalid) 

Для решения этой проблемы я удалил символы ASCII 0 из сжатого файла. Для этого я выполнил следующую команду из экземпляра Compute Engine с установленным sdk:

gsutil cp gs://bucket_987234/compress_file.gz - | gunzip | tr -d '\000' | gsutil cp - gs://bucket_987234/uncompress_and_clean_file

Используя конвейеры, я избавляюсь от необходимости хранить все данные на жестком диске (1G сжатие + 52G распаковка). Первая программа получает сжатый файл из хранилища, вторая распаковывает его, третья удаляет символы ASCII 0, а четвертая программа загружает результат в хранилище.

Я не сжимаю результат при повторной загрузке в хранилище, поскольку для BigQuery быстрее загружается несжатый файл. После этого я могу загрузить на BigQuery данные без проблем.

0

Bad character (ASCII 0) encountered. Rest of file not processed.

Ясно, что у вас есть символ UTF-16, который не может быть декодирован. Сервис BigQuery поддерживает только текстовые кодировки UTF-8 и latin1. Итак, файл должен быть в кодировке UTF-8.

There are only 14222273 lines in the file, so the line number that is printed in the error message is one line past the end of the file.

Возможно, у вас есть символ табуляции в кодировке UTF-16 в конце файла, который не может быть декодирован.


Solution: Использовать-a или же--ascii флаг сgzip команда. Он будет декодирован нормальноbigquery.

Похожие вопросы