sql - 使用 Spark SQL 根据条件创建新列?
问题描述
我想添加一个新列,该列将显示一个名为“完成”的标签
该表如下所示:
no type
1 a
1 a
1 a
2 a
2 a
2 a
2 a
并且“完成”标签将在新列中:
no type tag
1 a
1 a
1 a done
2 a
2 a
2 a
2 a done
所以基本上,“完成”标签将出现在每个数字的末尾。
如何使用 Spark SQL 做到这一点?
谢谢你。
解决方案
SQL 表表示无序集(技术上是多集,因为它们可以有重复)。没有指定排序的列就没有排序。没有“最后”行,因为没有排序。
通常,这样的排序可用作 id 或插入时间戳或其他东西。如果您有这样的列,则可以枚举每个行no
,然后添加标签:
select t.*,
(case when row_number() over (partition by type, no order by <ordering col> desc) = 1
then 'done'
end) as flag
from t;
注意:这保证了恰好一行带有no
/type
已经“完成”。即使行是交错的(基于排序列)也是如此。如果您只想检查下一行是否不同,则可以lead()
改用。
推荐阅读
- sql - 在 DB2 中使用不同的 group by 语句
- angular - 嵌套的 Angular 订阅未触发
- python - 计算 2 个列表之间的匹配项(考虑顺序)
- python-3.x - 带有 Pytest 的 Crontab 有问题
- python - 如何从 Outlook 收件箱子文件夹中读取电子邮件
- sql-server - 可空列的 NULL 默认约束
- android - Chrome 检查器无法正确连接到 Cordova 应用程序
- c++ - 使用 dpbtrf 时出现分段错误
- python - 不和谐机器人没有响应
- node.js - 注销所有设备、NodeJS 和 Angular 6