在 Dataflow 中使用啥转换来合并具有不同列的 csv 文件,同时将它们加载到 BigQuery?
Posted
技术标签:
【中文标题】在 Dataflow 中使用啥转换来合并具有不同列的 csv 文件,同时将它们加载到 BigQuery?【英文标题】:What transformation to use in Dataflow to merge csv files with differing columns while loading them to BigQuery?在 Dataflow 中使用什么转换来合并具有不同列的 csv 文件,同时将它们加载到 BigQuery? 【发布时间】:2020-03-10 11:04:45 【问题描述】:我有几个 csv 文件,我需要为这些文件创建一个表。问题是文件有不同的列 - 大多数列是相同的,除了 1 或最多 2 列发生变化。使用图形用户界面将它们从 GCS 加载到 BigQuery 会产生不正确的结果或完全失败。此外,每当缺少 YEAR
列时,我想为整个文件手动提供一个值。
我们可以看下面2个文件做demo——
file1.csv -
ITEM,TYPE,COLOR,YEAR
a,1,red,2010
b,2,blue,2010
c,3,green,2010
file1.csv 其中YEAR
将是 2012(缺失列的位置不必在末尾)-
ITEM,TYPE,COLOR
d,3,yellow
e,2,orange
f,1,cyan
将文件合并到单个 BigQuery 表中的样子 -
+------+------+--------+------+
| ITEM | TYPE | COLOR | YEAR |
+------+------+--------+------+
| a | 1 | red | 2010 |
| b | 2 | blue | 2010 |
| c | 3 | green | 2010 |
| d | 3 | yellow | 2012 |
| e | 2 | orange | 2012 |
| f | 1 | cyan | 2012 |
+------+------+--------+------+
我想知道在从 GCS 读取文件并将它们作为表加载到 BigQuery 中时是否可以进行此类转换(最好使用 Apache Beam 的 Python SDK?)。
使用 SDK 还是提供自定义模板文件从 GCS 运行更好(如 Dataflow GUI 所示)?
任何关于它的资源将不胜感激。
【问题讨论】:
【参考方案1】:请查看this,您可以在其中找到使用 Dataflow python API 从 CSV 文件提取数据并将其写入 BigQuery 的指南。
这是另一个guide,它还从 CSV 文件中提取数据,并通过将源数据中的日期格式转换为 BigQuery 接受的日期格式来执行基本的数据类型转换。
关于您的问题“使用 SDK 还是提供从 GCS 运行的自定义模板文件更好(如 Dataflow GUI 所示)? 我相信这是个人喜好问题,没有一个比另一个更好。
话虽如此,请随时关注此tutorial,其中包含多个 Google 提供的批处理模板。
【讨论】:
以上是关于在 Dataflow 中使用啥转换来合并具有不同列的 csv 文件,同时将它们加载到 BigQuery?的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 Spark 中使用 Dataframes(由 structtype 方法创建)合并具有不同列数的 2 个表?