BQ не удалось проанализировать "\ N" как INT или DATETIME, используя nullMarker: "\ N" в определении таблицы для внешней федеративной таблицы - PullRequest
0 голосов
/ 31 января 2019

Я использую "\ N" для null для типов данных INTEGER или DATETIME в определении таблицы JSON (nullMarker: "\ N") для внешних таблиц, но затем также BQ не может его проанализировать и выдает следующую ошибку:

error message: Could not parse '\N' as int for field [Field Name](position 2) 
starting at location 0

Может кто-нибудь, пожалуйста, помогите мне, что может быть возможным исправить?

1 Ответ

0 голосов
/ 25 мая 2019

Я использую 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быть представленным правильно.

...