在 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" 转换和数组取消嵌套。但在此过程中,您将丢失列的名称,并且需要重命名它们。
我有一个 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" 转换和数组取消嵌套。但在此过程中,您将丢失列的名称,并且需要重命名它们。