繁体   English   中英

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

[英]BigQuery Could not parse 'null' as int for field

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

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

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

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

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

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

请尝试作业配置设置。

job_config.null_marker = 'NULL'

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

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

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 命令的更多信息。

但是,load 命令可以让您一次创建和加载一个表。 需要在以下格式的 JSON 文件中指定架构:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM