在 Google 数据准备中将多行合并为单行

Combine multiple rows into single row in Google Data Prep

我有一个 table,它在不同的行中有多个负载值。我想将这些行组合成一行以将所有数据放在一起。 Table 看起来像这样。

+------------+--------------+------+----+----+----+----+
|    Date    |     Time     | User | D1 | D2 | D3 | D4 |
+------------+--------------+------+----+----+----+----+
| 2020-04-15 | 05:39:45 UTC | A    |  2 |    |    |    |
| 2020-04-15 | 05:39:45 UTC | A    |    |  5 |    |    |
| 2020-04-15 | 05:39:45 UTC | A    |    |    |  8 |    |
| 2020-04-15 | 05:39:45 UTC | A    |    |    |    |  7 |
+------------+--------------+------+----+----+----+----+

我想把它转换成这样。

+------------+--------------+------+----+----+----+----+
|    Date    |     Time     | User | D1 | D2 | D3 | D4 |
+------------+--------------+------+----+----+----+----+
| 2020-04-15 | 05:39:45 UTC | A    |  2 |  5 |  8 |  7 |
+------------+--------------+------+----+----+----+----+

我尝试了 "set" 和 "aggregate",但它们没有像我希望的那样工作,我不确定如何继续。

如有任何帮助,我们将不胜感激。 谢谢

tl;博士:

使用 fill() 函数填充所需组(又名 - 日期+时间+用户列)中每个 d1-d4 列中的所有空值,然后 dedup\aggregate 满足您的需求。

长版

所以最快的方法是使用一个名为 "fill()" 的 window 函数。 这个函数对列中的每个给定字段做了什么,它告诉它: "Look down. look up. find the closest non-empty value, and copy it!" 你当然可以限制它的视线(例如,只看上面的3行)但对于这个例子,不需要限制。所以你的填充函数看起来像这样: 填充($col, -1, -1) 所以“$col”将引用所有选定的列。 “-1”表示 "unlimited sight"。 最后,“~”表示 "from column D1 to column D4".

因此,函数将如下所示:

.

这将使您的列看起来像这样: .

现在您可以使用 "dedup" 转换删除任何重复项,每个 "group" 只保留 1 个副本。 或者,如果您仍想使用 "group by",您也可以这样做。

希望对您有所帮助=]

p.s 有更多方法可以做到这一点——这需要使用 "pivot" 转换和数组取消嵌套。但在此过程中,您将丢失列的名称,并且需要重命名它们。