CSV 到 BQ:空字段而不是空值

Posted

技术标签:

【中文标题】CSV 到 BQ:空字段而不是空值【英文标题】:CSV to BQ: empty fields instead of null values 【发布时间】:2017-07-15 23:25:25 【问题描述】:

我有一个管道将 CSV 文件从 GCS 加载到 BQ。详情在这里:Import CSV file from GCS to BigQuery。

我将 ParDo 中的 CSV 拆分为 TableRow,其中一些字段为空。

String inputLine = c.element();

String[] split = inputLine.split(',');

TableRow output = new TableRow();
output.set("Event_Time", split[0]);
output.set("Name", split[1]);
...
c.output(output);

我的问题是,如何让空字段在 BigQuery 中显示为 null?目前,它们以空字段的形式出现。

【问题讨论】:

【参考方案1】:

它在 BigQuery 中显示为空字符串,因为当您使用 split() 时,它将在数组中为 ,, 而不是 null 返回一个空字符串。

两种选择:

    检查结果数组中的空字符串,不要在output 中设置字段。 检查结果数组中的空字符串,并为output 中的字段显式设置null

无论哪种方式,BigQuery 都会产生 null

注意:像这样在 Java 中小心拆分字符串。 split() 将删除前导和尾随空。请改用split("," -1)。见here。

顺便说一句:除非您在 Dataflow 中进行一些复杂/高级的转换,否则您不必使用管道来加载 CSV 文件。你可以load 它或阅读它directly from GCS。

【讨论】:

感谢 Graham,我正在构建一个带有转换但开始非常简单的管道。感谢您的回答和其他反馈。

以上是关于CSV 到 BQ:空字段而不是空值的主要内容,如果未能解决你的问题,请参考以下文章

将数据插入 MySQL 数据库时使用 PHP 替换 CSV 文件中的空值

弹性搜索:索引具有空值的日期字段

oracle怎么判断一个字段不是空值

Pandas read_csv 用字符串“nan”填充空值,而不是解析日期

spark df.write 引用所有字段,但不引用空值

从 Laravel 5.3 升级到 Laravel 5.4 并且空字段转换为 NULL