将JSON数据加载到BigQuery表中

时间:2017-08-28 20:38:38

标签: json google-bigquery

我正在尝试通过以下方式将简单的JSON数据加载到BigQuery表中:

$ bq load \
    --apilog \
    --source_format=NEWLINE_DELIMITED_JSON \
    my_dataset.my_table \
    ./input.json ./schema.json

但是收到以下错误消息:

Upload complete.
Waiting on bqjob_xxxx_xxx ... (3s) Current status: DONE
BigQuery error in load operation: Error processing job 'my_project_id:bqjob_xxxx_xxx': CSV table encountered too many errors, giving up. Rows: 1; errors: 1.
Failure details:
- file-00000000: Error detected while parsing row starting at
position: 0. Error: Data between close double quote (") and field
separator.

它抱怨一些CSV错误,但我正在尝试加载JSON(--source_format=NEWLINE_DELIMITED_JSON

我的input.json包含以下数据:

{"domain":"stackoverflow.com","key":"hello","value":"world"}

我的schema.json如下:

[
    {
        "name": "domain",
        "type": "string",
        "mode": "nullable"
    },
    {
        "name": "key",
        "type": "string",
        "mode": "nullable"
    },
    {
        "name": "value",
        "type": "string",
        "mode": "nullable"
    }
]

bq版本2.0.25:

$ gcloud version | grep ^bq
bq 2.0.25

2 个答案:

答案 0 :(得分:2)

BQ命令说:

USAGE: bq.py [--global_flags] <command> [--command_flags] [args]

如您所见, global_flags command_flags

对于具有值的 global_flags ,您需要使用等号:

--flag=value

command_flags 是布尔值:

--[no]replace

或者他们接受必须遵循旗帜的论据:

--source_format NEWLINE_DELIMITED_JSON

也不要混合全局和命令标志:apilog是一个全局标志。 我会把你的命令改写成:

$ bq --apilog load \
    --source_format NEWLINE_DELIMITED_JSON \
    my_dataset.my_table \
    ./input.json ./schema.json

答案 1 :(得分:2)

这里的问题是标志apilog需要一个字符串作为输入。此命令应该适合您:

bq load \
    --apilog '' \
    --source_format=NEWLINE_DELIMITED_JSON \
    my_dataset.my_table \
    ./input.json ./schema.json

空字符串将输出发送到stdout。如果要将日志保存到本地文件,则只需发送非空字符串,例如--apilog 'localfile_name'