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

Posted

技术标签:

【中文标题】BigQuery 上传 API - 有没有添加多个 nullMarker 的方法?【英文标题】:BigQuery upload API - is there a way of adding multiple nullMarkers? 【发布时间】:2018-12-18 15:23:25 【问题描述】:

我正在使用 Python API 将 TSV 数据上传到 BigQuery,但我遇到了我的 TSV 有一堆“。”的情况。和“-”符号,我想将两者都视为 NULL。

我知道我可以将名为null_markerLoadJobConfig() 属性设置为字符串,并且在上传期间该字符串将被视为NULL。

来自documentation:

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

问题:但是有没有办法使用多个空标记?

我使用的文件非常大,通过文件并将“-”替换为“。”效率不高。或相反亦然。

【问题讨论】:

【参考方案1】:

null_marker 不是为此而设计的。

您应该让整个导入进入 BigQuery,然后进行查询并使用 NULL 值重写同一个表。

在您使用流式 API 时,您已经逐行加载文件,因此您也可以自行更改。 如果您上传文件,您可能需要重新考虑自动使用 GCS -> Cloud Functions -> BigQuery(以及可选)-> 查询并使用 NULL 值重写表。这样做你只需要将你的文件发布到 GCS,它们就会自动加载,文件可以由函数保留或删除,函数也可以触发其他步骤,比如用 NULL 值重写。

【讨论】:

问题是,我有一个特定字段为双精度的架构,当我上传数据时它失败,因为它无法将“-”解析为双精度,因此我使用 nullMarker。 ..而且我不能“让整个导入进入 BigQuery”,因为导入本身会失败。 创建一个带有字符串列的模式并导入其中,然后您将没有错误的值 SAFE.CAST 为 Double:阅读:cloud.google.com/bigquery/docs/reference/standard-sql/…

以上是关于BigQuery 上传 API - 有没有添加多个 nullMarker 的方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何触发数据从 Cloud Storage 上传到 Kubernetes Engine 的 BigQuery?

在 BigQuery 中动态查询多个表

Google Bigquery API:如何将结果查询添加到表中?

从 appengine 上传到 bigquery 时如何忽略未知值

使用 BigQuery Storage API(测试版)启动和读取多个流

在 Bigquery 中为多个 CSV 文件自动创建表