[英]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.