将数据集参数添加到列中,以便稍后在BigQuery中与DataPrep一起使用

时间:2019-02-19 12:55:56

标签: google-bigquery google-cloud-dataflow google-cloud-dataprep

我正在通过Google DataPrep从Google Cloud Storage(GCS)导入多个文件,并将结果存储在Google BigQuery的表中。 GCS的结构如下所示:

//source/user/me/datasets/{month}/2017-01-31-file.csv
//source/user/me/datasets/{month}/2017-02-28-file.csv
//source/user/me/datasets/{month}/2017-03-31-file.csv

我们可以创建一个数据集,其参数为outlined on this page。一切正常,我已经能够正确导入它。

但是,在此BigQuery表(输出)中,我无法仅提取其中带有参数month的行。

因此,如何使用DataPrep将这些数据集参数(此处为{month})添加到我的BigQuery表中?

2 个答案:

答案 0 :(得分:2)

当前无法访问流中的数据源位置或参数匹配值。只有数据集中的数据可供您使用。 (SOURCEROWNUMBER()除外)

部分解决方案

我用来模拟将参数插入到最终表中的一种方法是按参数进行多个数据集导入,然后在将转换运行到最终表之前合并它们。

对于每个已知的参数搜索数据集,都有一个配方,可以在每个数据集中用该参数填充一列,然后合并每个参数的结果。 Single Row formula

很明显,这仅是可伸缩的,即,如果您知道将匹配的参数值集,它就可以工作。一旦您了解了源文件中时间戳的粒度,便无法实现。

Image of the flow described. 在此示例中,仅年份值是过滤后的参数。


更长期的解决方案 (放在一边)

我最终滑过的另一种方法是使用Dataprep定义数据流作业,将它们用作数据流模板,然后运行业务流程功能来运行数据流作业(不是dataprep)并修改用于通过API输入和输出的参数。然后是一个转换BigQuery Job,它执行了舍入附加功能。

如果流量已经稳定解决,则值得,但不用于即席;一切都取决于您的规模。

答案 1 :(得分:2)

虽然原始答案在发布时是正确的,但上周推出了一个更新,其中添加了发行说明中未特别解决的许多功能,包括针对此问题的另一种解决方案。

除了SOURCEROWNUMBER()(现在也可以表示为$sourcerownumber)之外,现在还有一个名为$filepath的源元数据引用-如您所料,它存储本地云存储中文件的路径。

这里有很多警告,例如,pivotjoinunnest不会返回BigQuery源的值,并且不可用。 。 。但是在您的情况下,您可以轻松地将其放入一列中并使用它进行所需的匹配或删除操作。

注意:如果您的数据源示例是在此功能之前创建的,则需要创建一个新示例才能在界面中看到它(而不仅仅是NULL值)。

这些元数据字段的完整注释在此处提供: https://cloud.google.com/dataprep/docs/html/Source-Metadata-References_136155148