更新时间:2024-11-11 GMT+08:00
去重
功能描述
对在列的集合内重复的行进行删除,只保留第一行或最后一行数据。
语法格式
SELECT [column_list] FROM ( SELECT [column_list], ROW_NUMBER() OVER ([PARTITION BY col1[, col2...]] ORDER BY time_attr [asc|desc]) AS rownum FROM table_name) WHERE rownum = 1
语法说明
- ROW_NUMBER(): 从第一行开始,依次为每一行分配一个唯一且连续的号码。
- PARTITION BY col1[, col2...]: 指定分区的列,例如去重的键。
- ORDER BY time_attr [asc|desc]: 指定排序的列。所制定的列必须为时间属性。目前仅支持proctime。升序( ASC )排列指只保留第一行,而降序排列( DESC )则指保留最后一行。
- WHERE rownum = 1: Flink 需要 rownum = 1 以确定该查询是否为去重查询。
注意事项
无。
示例
根据order_id对数据进行去重,其中proctime为事件时间属性列。
SELECT order_id, user, product, number FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY proctime ASC) as row_num FROM Orders) WHERE row_num = 1;
父主题: 数据操作语句DML