将数据集参数添加到列中,以便稍后通过 DataPrep 在 BigQuery 中使用它们

Add dataset parameters into column to use them in BigQuery later with DataPrep

我正在通过 Google DataPrep 从 Google 云存储 (GCS) 导入多个文件,并将结果存储在 Google BigQuery 的 table 中。 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 table(输出)中,我无法仅提取其中包含参数 month 的行。

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

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

部分解

我一直用来模拟参数插入到最终 table 中的一种方法是通过参数导入多个数据集,然后在 运行 构建您的 t运行 数据集之前合并这些数据集进入决赛 table。

对于每个已知参数搜索数据集,有一个配方,用每个数据集的参数填充一列,然后合并每个数据集的结果。

显然,这只是可扩展的,也就是说,如果您知道将匹配的参数值集,它就可以工作。一旦你到达源文件中的 g运行 时间戳的通用性,这是不可能的。

在此示例中,只有年份值是过滤参数。


更长的解决方案 (旁白)

我最终想到的替代方案是使用 Dataprep 定义数据流作业,将它们用作数据流模板,然后 运行 一个编排函数 运行 数据流作业(不是 dataprep)和通过 API 修改了输入和输出的参数。然后有一个 t运行sformation BigQuery Job 执行汇总追加功能。

如果流程很稳定的话还是值得的,但不是临时的;一切都取决于你的规模。

虽然最初的答案在发布时是正确的,但上周推出了一个更新,其中添加了一些未在发行说明中具体说明的功能——包括针对此问题的另一种解决方案。

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

这里有一些注意事项,例如它不会返回 BigQuery 源的值,并且如果您 pivotjoinunnest 则不可用。 . .但在您的场景中,您可以轻松地将其放入列中并使用它进行任何需要的匹配或删除。

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

这些元数据字段的完整说明可在此处获得: https://cloud.google.com/dataprep/docs/html/Source-Metadata-References_136155148