0

我在外部表的 JSON 表定义( )中使用\Nfor nullINTEGER或数据类型,但 BigQuery 也无法解析它并引发以下错误:DATETIMEnullMarker:"\N"

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

任何人都可以帮助我,有什么可能的解决方法?

4

1 回答 1

1

我正在使用 BigQuery Cloud SDK CLI 来尝试做同样的事情。我正在使用标志--null_marker="\N"--source_format NEWLINE_DELIMITED_JSON加载数据。这是我收到的错误消息:

BigQuery error in load operation: Only CSV imports may specify a null marker.

因此,JSON 格式的 BigQuery 导入似乎不支持空标记。对我来说相当令人失望。

这是我用来测试和验证的确切代码和示例:

这是一个文件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 值。

编辑:回到这一点后,我确实发现 JSON 格式的数据将允许 NULL,但不允许使用空标记。您只需省略键/值对,即可将 JSON 数据作为 NULL 加载到 BigQuery。因此,example.json应该看起来像这样,以使上述那些\N曾经存在的字段无效。

    {"col1": "1", "col2": "A Fat Man", "col3": "3.5", "col4": "SOme moRE TExt"}
    {"col1": "2", "col3": "4.2", "col4": "texttexttext"}
    {"col1": "3", "col4": "JUSTTEXT"}
    {"col1": "4", "col2": "uno", "col3": "2.0", "col4": ""}

而且我验证了上述内容确实可以在不需要额外标志的情况下以及外部表中使用。

于 2019-05-24T21:45:08.197 回答