РЕДАКТИРОВАНИЕ: Предоставление дополнительных образцов данных, а также используемой схемы.
У меня проблемы с загрузкой файлов с разделителями табуляции (*.tsv
) в BigQuery через CLI.
Две строки образцов данных (test.tsv
) ниже. Ссылка на пример данных ЗДЕСЬ
user 2019-04-30 11:12:42 3459323 6461614 945923 683716374614 14362 30475264 9919323 15502 144353 14115 57 1.11.11.11 0 1 23 75 aerfla/8.0 (aerf; aerf aerf aa 22_2 like str aef X) aerfae/65.91.15 (aea like fae) aerf/a1548 (556544) xxxx x xxx 77023 992015 file:///path/path Product file:///path/path Product Detail file:///path/path 3 file:///path/path 3 Product Detail xx:Pe Matten - Kids' 227,288,289,101,114,135,147,153
user 2019-04-30 11:12:31 89459323 41661614 8056994 5481614 54351 60815513 59169523273 96602 44350 1556644115 57 1.11.11.11 0 1 67 35 adf/6.1 (aerfae; ae aerf 1S 12_3 like eec ee x) aerfapaerfb/615.0.5 (aerfL, like aao) aerfe/1E18 (6544) xxxxxxld xxx xxx 770 84015 file:///path/path/ LLL: aerfa file:///path/path/path/path/ file:///path/path/path/ 3 file:///path/path 3 Search Results
user 2019-04-30 11:12:32 071459323 753717461 805659323 7461614 4452 68296384 76953768 6602 1351 1556644115 57 1.11.11.11 0 1 76 5 aerfa/9.0 (aerfae; xxx aerfa xx 19_0 like xaerf xx X) aerfaerf/605.1.15 (aerfaerf, like aerfaerf) aerfaerf/1aerf5E148 (52995544) xxxxxx xx xxxx 770 84015 file:///path/path/ Product file:///path/path Product Detail file:///path/path/ 3 file:///path/path/ 3 PPP Detail DDD:AAA Glove\ - Kids' 227,288,289,211,114,135,147,153
Файл test_schema.json
:
[
{"name":"col0", "type": "STRING", "mode": "NULLABLE"},
{"name":"col1", "type": "TIMESTAMP", "mode": "NULLABLE"},
{"name":"col2", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col3", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col4", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col5", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col6", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col7", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col8", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col9", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col10", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col11", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col12", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col13", "type": "STRING", "mode": "NULLABLE"},
{"name":"col14", "type": "STRING", "mode": "NULLABLE"},
{"name":"col15", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col16", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col17", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col18", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col19", "type": "STRING", "mode": "NULLABLE"},
{"name":"col20", "type": "STRING", "mode": "NULLABLE"},
{"name":"col21", "type": "STRING", "mode": "NULLABLE"},
{"name":"col22", "type": "STRING", "mode": "NULLABLE"},
{"name":"col23", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col24", "type": "STRING", "mode": "NULLABLE"},
{"name":"col25", "type": "STRING", "mode": "NULLABLE"},
{"name":"col26", "type": "STRING", "mode": "NULLABLE"},
{"name":"col27", "type": "STRING", "mode": "NULLABLE"},
{"name":"col28", "type": "STRING", "mode": "NULLABLE"},
{"name":"col29", "type": "STRING", "mode": "NULLABLE"},
{"name":"col30", "type": "STRING", "mode": "NULLABLE"},
{"name":"col31", "type": "STRING", "mode": "NULLABLE"},
{"name":"col32", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col33", "type": "STRING", "mode": "NULLABLE"},
{"name":"col34", "type": "INTEGER", "mode": "NULLABLE"},
{"name":"col35", "type": "STRING", "mode": "NULLABLE"},
{"name":"col36", "type": "STRING", "mode": "NULLABLE"},
{"name":"col37", "type": "STRING", "mode": "NULLABLE"},
{"name":"col38", "type": "STRING", "mode": "NULLABLE"},
{"name":"col39", "type": "STRING", "mode": "NULLABLE"},
{"name":"col40", "type": "STRING", "mode": "NULLABLE"},
{"name":"col41", "type": "STRING", "mode": "NULLABLE"},
{"name":"col42", "type": "STRING", "mode": "NULLABLE"},
{"name":"col43", "type": "STRING", "mode": "NULLABLE"},
{"name":"col44", "type": "STRING", "mode": "NULLABLE"},
{"name":"col45", "type": "STRING", "mode": "NULLABLE"},
{"name":"col46", "type": "STRING", "mode": "NULLABLE"},
{"name":"col47", "type": "STRING", "mode": "NULLABLE"},
{"name":"col48", "type": "STRING", "mode": "NULLABLE"},
{"name":"col49", "type": "STRING", "mode": "NULLABLE"}
]
Команда CLI BQ, которая работает без ошибок:
bq load \
--field_delimiter=tab \
--source_format=CSV \
--allow_jagged_rows \
--replace \
mydataset.test \
test.tsv \
test_schema.json
Команда не будет работать без опции --allow_jagged_rows
. Использование max_bad_records=100
или --ignore_unknown_values
тоже не помогло. Я получаю сообщение об ошибке, если не использую --allow_jagged_rows
:
Error while reading data, error message: CSV table references
column position 49, but line starting at position:0 contains only
49 columns.
При использовании --allow_jagged_rows
для загрузки данных в BQ существует проблема с анализом значения в col43
. Снимок экрана второй половины таблицы BQ после загрузки с использованием интерфейса командной строки: ![enter image description here](https://i.stack.imgur.com/ZaE5i.png)
Для предоставленных образцов данных проблемы возникают в столбце col43
. Первый ряд и третий ряд были проанализированы правильно. Во второй строке показано, что BQ разбивает значение DDD:AAA Glove\ - Kids'
на два и заполняет оба значения col43
и col44
вместо col43
. Кроме того, это влияет на количество столбцов после него. Ясно, что синтаксический анализатор BQ не подтверждает, что символу tab
предшествует \
в DDD:AAA Glove\ - Kids'
.
Есть ли способ избежать tab
, которому предшествует \
? Большинство примеров, которые я видел относительно escape-символов при загрузке CSV
в BQ, имеют отношение к экранирующим кавычкам. Я не нашел ничего полезного для моей проблемы. Я также пытаюсь избежать изменения этих файлов с помощью поиска / замены.
Если не удается избежать этого \\t
, я задаюсь вопросом, может ли моя единственная надежда - читать в каждой строке одну строку в промежуточная таблица BQ, затем выполните окончательный анализ в BQ с SQL, где я мог бы иметь больше контроля.