Я использую CLI BigQuery Cloud SDK, чтобы попытаться сделать то же самое.Я использую флаги --null_marker="\N"
и --source_format NEWLINE_DELIMITED_JSON
для загрузки данных.Вот сообщение об ошибке, которое я получаю:
BigQuery error in load operation: Only CSV imports may specify a null marker.
Таким образом, похоже, что нулевые маркеры не поддерживаются для импорта BigQuery в формате JSON.Довольно разочаровывает меня.
Вот точный код и пример, который я использовал для проверки и проверки:
это файл с именем example.json
, где я хочу, чтобы символ \N
представлялмаркер NULL.
{"col1": "1", "col2": "A Fat Man", "col3": "3.5", "col4": "SOme moRE TExt"}
{"col1": "2", "col2": "\N", "col3": "4.2", "col4": "texttexttext"}
{"col1": "3", "col2": "\N", "col3": "\N", "col4": "JUSTTEXT"}
{"col1": "4", "col2": "uno", "col3": "2.0", "col4": ""}
это команда для создания таблицы (мой набор данных temp14):
bq mk temp14.null_json_test col1:INTEGER,col2:STRING,col3:FLOAT,col4:STRING
, а вот команда для загрузки данных, которые не работали:(
bq load --source_format NEWLINE_DELIMITED_JSON --null_marker="\N" temp14.null_json_test ./example.json col1:INTEGER,col2:STRING,col3:FLOAT,col4:STRING
Я могу заменить \N
в JSON пустой строкой, такой как
{"col1": "1", "col2": "A Fat Man", "col3": "3.5", "col4": "SOme moRE TExt"}
{"col1": "2", "col2": "", "col3": "4.2", "col4": "texttexttext"}
{"col1": "3", "col2": "", "col3": "", "col4": "JUSTTEXT"}
{"col1": "4", "col2": "uno", "col3": "2.0", "col4": ""}
, и она будет загружена, если я уберу флаг:
bq load --source_format NEWLINE_DELIMITED_JSON temp14.null_json_test ./example.json col1:INTEGER,col2:STRING,col3:FLOAT,col4:STRING
Но строки загружаются в таблицу как "" вместо null
, и мне нужно, чтобы они были NULL. Поле FLOAT правильно назначает NULL, но STRING - нет.
Моя работа вокругчтобы предварительно обработать пустые строки из моего набора данных в промежуточной области, которая похожа на пустое пространство, затем сделать так, чтобы моя финальная таблица представляла эти данные примерно так:
SELECT
col1
, CASE WHEN col2 = '' THEN NULL ELSE col2 END as col2
, col3
, CASE WHEN col4 = '' THEN NULL ELSE col4 END as col4
FROM
temp14.null_json_test
Я не могу использовать CSVдля моих данных, к сожалению и нужно JSON для работы, но также нужны значения NULLбыть представленным правильно.