BigQuery 加载 - NULL 被视为字符串而不是空

Posted

技术标签:

【中文标题】BigQuery 加载 - NULL 被视为字符串而不是空【英文标题】:BigQuery load - NULL is treating as string instead of empty 【发布时间】:2017-09-01 13:27:43 【问题描述】:

我的要求是从不同来源(Facebook、youtube、双击搜索等)提取数据并加载到 BigQuery。当我尝试提取数据时,在某些来源中,当列为空时,我得到“NULL”。

我尝试将相同的数据加载到 BigQuery,而 BigQuery 将其视为字符串而不是 NULL(空)。

现在在加载到 BigQuery 之前替换存在 NULL 的“”(空字符串)。除了这样做之外,还有任何方法可以直接加载文件而无需任何操作(替换)。

谢谢,

【问题讨论】:

你是如何加载数据的?通过命令行还是使用任何编程语言? 您好,我正在使用 python API 加载到 BigQuery。 您介意分享一些代码吗?这很重要,因为至少有两个 python 包用于加载数据,我只是想确保我知道你使用的是哪个。 有一个加载选项可以用于这种情况:configuration.load.nullMarker cloud.google.com/bigquery/docs/reference/rest/v2/… 有没有办法从 Web 控制台加载它?我的经理有时很想通过控制台加载相同的数据。 【参考方案1】:

源文件的文件格式是什么? CSV、新行分隔的 JSON、Avro 等?

原因是 CSV 将空字符串视为空值,而 NULL 是字符串值。因此,如果您不想在加载之前操作数据,则应将文件保存为 NLD Json 格式。

正如您提到您正在从社交媒体平台提取数据,我假设您正在使用他们的 REST API,因此您可以将这些数据保存在 NLD Json 而不是 CSV 中。

回答您的问题我们有没有办法从 Web 控制台加载它?: 是的,转到您的 bigquery 项目控制台 https://bigquery.cloud.google.com/ 并在数据集中创建表,您可以在其中指定源文件和表架构详细信息。

来自评论部分(为方便其他观众):

bq 命令中是否有任何选项可以解决这个问题?

试试这个: bq load --format=csv --skip_leading_rows=1 --null_marker="NULL" yourProject:yourDataset.yourTable ~/path/to/file/x.csv Col1:string,Col2:string,Col2:integer,Col3:string

【讨论】:

感谢 Pulkit 的回复。您在 Web 控制台中说它可能,但后面的部分我没有得到。我知道如何通过 Web 控制台创建表格。是否可以选择在通过 Web 控制台上传时将 NULL 视为空而不是字符串。正如张华所说,我们在通过 API configuration.load.nullMarker 拉取时有一个选项,这样就有一个选项。 我认为控制台中没有更改“configuration.load.nullMarker”的选项。它应该遵循每种文件格式的默认配置。 感谢 Pulkit 的回复。 bq 命令中是否有任何选项? 尝试类似:bq load --format=csv --skip_leading_rows=1 --null_marker="NULL" yourProject:yourDataset.yourTable ~/path/to/file/x.csv Col1:string,Col2:string,Col2:integer,Col3:string 如果列是字符串没有任何问题。假设列是浮点数或整数,那么它会抛出错误。【参考方案2】:

您可以考虑运行类似以下的命令: bq load --field_delimiter="\t" --null_marker="\N" --quote="" \ PROJECT:DATASET.tableName gs://bucket/data.csv.gz table_schema.json

更多详细信息可以从对“将数据从 mysql 迁移到 BigQuery 的最佳实践”question 的回复中收集。

【讨论】:

以上是关于BigQuery 加载 - NULL 被视为字符串而不是空的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 加载列中包含“null”文本的 CSV 文件

将 avro 十进制数据加载到 BigQuery 中?

BigQuery 上传 API - 有没有添加多个 nullMarker 的方法?

以增量方式将 Cloud SQL 转换为 BigQuery

在 BigQuery 中加载 avro 文件 - 默认值的类型为意外类型。预期为 null,但找到字符串:“null”

字符串列表上的 BigQuery 左连接返回 null