我只是在尝试添加一个列,其中包含一个旅程的唯一标识符。我有一张类似的table:
Time id station newtrip
2017-11-15 16:45 100 St.George TRUE
2017-11-15 16:46 100 Bloor FALSE
2017-11-15 16:47 110 Wellesley TRUE
2017-11-15 16:48 110 Wellesley FALSE
2017-11-15 16:49 200 Dundas TRUE
2017-11-15 16:55 200 College FALSE
2017-11-15 16:56 200 Union FALSE
2017-11-15 17:51 200 Union TRUE
2017-11-15 17:52 200 St.Andrew FALSE
我所要做的就是每次最后一列显示true时递增一个计数器。所以结果应该是这样的:
Time id station newtrip journeyID
2017-11-15 16:45 100 St.George TRUE 1
2017-11-15 16:46 100 Bloor FALSE 1
2017-11-15 16:47 110 Wellesley TRUE 2
2017-11-15 16:48 110 Wellesley FALSE 2
2017-11-15 16:49 200 Dundas TRUE 3
2017-11-15 16:55 200 College FALSE 3
2017-11-15 16:56 200 Union FALSE 3
2017-11-15 17:51 200 Union TRUE 4
2017-11-15 17:52 200 St.Andrew FALSE 4
有几件事需要注意
如果使用窗口分析函数,我不会对任何东西进行分区。我希望这个能覆盖整个table(大约30毫升行)。
我可以在hortonworks ambari vm上实现这一点,方法是为整个表添加一个行计数器(rowid),然后执行以下操作:
sum(if(newtrip,1,0))over(order by rowid)as journeyid
但是当在aws emr的集群中运行完全相同的代码时,添加一个行id似乎会打乱其他列的顺序,结果会变得一团糟。
当然有一个简单的方法可以做到这一点?
暂无答案!
目前还没有任何答案,快来回答吧!