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

时间:2017-07-29 01:40:57

标签: google-bigquery

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

  

无法将“null”解析为字段

的int

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

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

  

job_config.null_marker =' NULL'

configuration.load.nullMarker

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

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

答案 2 :(得分:1)

BigQuery Console有其局限性,不允许您在从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

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

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