【问题标题】:BigQuery Could not parse 'null' as int for fieldBigQuery 无法将“null”解析为字段的 int
【发布时间】:2018-01-05 04:03:36
【问题描述】:

尝试将 csv 文件加载到 bigquery 表中。有些列的类型为 INTEGER,但一些缺失值为 NULL。所以当我使用命令 bq load 加载时,得到如下错误:

无法将“null”解析为字段的 int

所以我想知道解决这个问题的最佳解决方案是什么,必须先重新处理数据才能加载 bq?

【问题讨论】:

  • 确认...看起来您的值是字符串'null',而不是实际为空。对吗?
  • @ElliottBrossard 没错,所以在 csv 文件中,它类似于 ,null,而不是 ,,。

标签: google-bigquery


【解决方案1】:

您需要转换数据才能得到预期的架构和数据。将列指定为 STRING 类型,而不是 INTEGER。将 CSV 文件加载到您不打算长期使用的表中,例如你的临时表。在 BigQuery 界面中,点击“显示选项”,然后选择具有所需表名的目标表。现在运行查询:

#standardSQL
SELECT * REPLACE(SAFE_CAST(x AS INT64) AS x)
FROM YourTempTable;

这会将字符串值转换为整数,其中'null' 被视为null。

【讨论】:

  • 非常感谢您的解决方案。该表实际上有许多整数类型的列以及其他类型的列。因为我正在构建一个数据管道来每天执行此操作。我想知道是否最好只处理 csv 文件以删除所有 null 以便 ,null, 变为 , 然后进行加载。
  • 这可以工作,或者您可以按原样加载数据,然后使用我上面建议的形式的查询定义逻辑视图。您可以查询逻辑视图,而不是直接查询表,该视图执行字符串到整数的转换。
【解决方案2】:

请尝试使用作业配置设置。

job_config.null_marker = 'NULL'

configuration.load.nullMarker
字符串
[可选] 指定表示 CSV 文件中的空值的字符串。例如,如果您指定“\N”,BigQuery 会在加载 CSV 文件时将“\N”解释为空值。默认值为空字符串。 如果您将此属性设置为自定义值,则 BigQuery 会在除 STRING 和 BYTE 之外的所有数据类型都存在空字符串时引发错误。对于 STRING 和 BYTE 列,BigQuery 会将空字符串解释为空值。

https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load

【讨论】:

    【解决方案3】:

    BigQuery 控制台有其局限性,不允许您在从 CSV 加载数据时指定空标记。但是,可以使用 BigQuery 命令行工具的 bq load 命令轻松完成。我们可以使用--null_marker 标志来指定标记,在这种情况下就是null。

    bq load --source_format=CSV \
        --null_marker=null \
        --skip_leading_rows=1 \
        dataset.table_name \
        ./data.csv \
        ./schema.json
    

    将 null_marker 设置为 null 可以解决问题。如果表已经存在且具有有效架构,则可以省略 schema.json 部分。使用--skip_leading_rows=1 是因为我的第一行是标题。 您可以在 BigQuery 文档中详细了解 bg load command。

    然而,加载命令允许您一次性创建和加载表。架构需要在 JSON 文件中指定,格式如下:

    [
     {
       "description": "[DESCRIPTION]",
       "name": "[NAME]",
       "type": "[TYPE]",
       "mode": "[MODE]"
     },
     {
       "description": "[DESCRIPTION]",
       "name": "[NAME]",
       "type": "[TYPE]",
       "mode": "[MODE]"
     }
    ]
    

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 2018-11-23
      • 2011-06-09
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2013-10-09
      相关资源
      最近更新 更多