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

Google bigquery 将数据集参数添加到列中,以便稍后在使用DataPrep的BigQuery中使用它们,google-bigquery,google-cloud-dataflow,google-cloud-dataprep,Google Bigquery,Google Cloud Dataflow,Google Cloud Dataprep,我正在通过Google DataPrep从Google云存储(GCS)导入几个文件,并将结果存储在Google BigQuery的表中。地面军事系统的结构如下所示: //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 我们可以

我正在通过Google DataPrep从Google云存储(GCS)导入几个文件,并将结果存储在Google BigQuery的表中。地面军事系统的结构如下所示:

//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
我们可以创建一个参数为的数据集。这一切都很好,我已经能够正确导入它

但是,在这个BigQuery表(输出)中,我无法仅提取其中包含参数
month
的行


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

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

部分解决方案

我一直在使用一种方法来模拟最终表中的参数插入,即按参数导入多个数据集,然后在将转换运行到最终表之前将这些数据集合并

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

显然,这只是一种可扩展性,也就是说,如果您知道将匹配的参数值集,它就可以工作。一旦达到了源文件中时间戳的粒度,就不可能做到这一点

在本例中,仅年份值是过滤参数


更长的解决方案(旁白)

我最终选择的替代方案是使用Dataprep定义数据流作业,将其用作数据流模板,然后运行编排函数,运行数据流作业(而不是Dataprep),并通过API修改输入和输出参数。然后是一个转换BigQuery作业,它完成了roundup append函数


如果流量非常稳定,那么它是值得的,但不是临时的;这一切都取决于你的规模。

虽然发帖时原始答案是正确的,但上周发布了一个更新,添加了一些发行说明中没有特别提到的功能,包括这个问题的另一个解决方案

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

这里有许多警告,例如它不会返回BigQuery源的值,并且如果您
pivot
join
、或
unest
,它将不可用。但在您的场景中,您可以轻松地将其放入列中,并使用它执行任何需要的匹配或删除操作

注意:如果您的数据源示例是在此功能之前创建的,那么您需要创建一个新示例,以便在接口中看到它(而不仅仅是空值)

以下是这些元数据字段的完整说明:

您应该尝试在Trifacta论坛上问这个问题(这是在Google Dataprep命名下运行的实际解决方案):谢谢,但我讨厌有两千个不同的帐户。问题是您在生成的数据集中缺少文件名?文件名以及文件夹和另一个动态子文件夹的日期。我按数据类型和日期(yyyymmdd)存储文件。我希望这能反映在表格中,因为我正在使用Append-to-Table,这样我就可以有效地过滤出每日文件。实际上,@Trifacta在社区论坛上的回答看起来更符合这个要求<代码>$filename作为参考。随着时间的推移,可能会添加其他参考资料。在这种情况下,最有用的是包含每个输入数据集的匹配值。i、 e.$parameters>['2019'、'2019-02-22'、'csv']$parameters[0]='2019'正如我在回答中所指出的,这现在通过Cloud Dataprep中的
$filepath
呈现出来。也许值得用这些信息来更新你接受的答案,因为这是一个更容易的选择!