我有一张带有重复记录的表ABC。我想使用Bteq将重复记录仅插入到同一模式中的另一个表ABC_DUPE中。 有什么建议吗?
谢谢, 穆克什
答案 0 :(得分:0)
您可以使用QUALIFY
语句来识别和输出重复项:
由于您没有共享您的表...然后考虑以下ABC
表:
+----+----+----+
| f1 | f2 | f3 |
+----+----+----+
| 1 | a | x |
| 1 | b | y |
| 2 | a | z |
| 2 | b | w |
| 2 | a | n |
+----+----+----+
使用字段f1
和f2
确定唯一记录的位置。在此示例中,f1=2 and f2='a'
与f3
值z
和n
重复的记录。要输出这些,我们使用qualify
:
SELECT *
FROM ABC
QUALIFY COUNT(*) OVER (PARTITION BY f1, f2) > 1;
QUALIFY
使用Window函数确定要包含在输出记录集中的记录。这里我们使用窗口函数COUNT(*)
按我们唯一的复合键f1, f2
进行分区。我们仅保留该分区上的Count(*)
大于1
的记录。
这将输出:
+----+----+----+
| f1 | f2 | f3 |
+----+----+----+
| 2 | a | z |
| 2 | a | n |
+----+----+----+
您可以在CREATE TABLE
语句中使用它,例如:
CREATE TABLE ABC_DUPE AS
(
SELECT *
FROM ABC
QUALIFY COUNT(*) OVER (PARTITION BY f1, f2) > 1
) PRIMARY INDEX (f1, f2);