避免雪花存储过程中的重复项
Avoiding duplicates in the stored procedures in snowflake
我编写了一个存储过程来将值插入 table。但是当我两次调用存储过程时,重复的值被插入到 table 中。如何避免存储过程中的值重复。
这是我的存储过程:
CREATE OR REPLACE PROCEDURE get_columns(TABLE_NAME VARCHAR)
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS
$$
var stmt = snowflake.createStatement({
sqlText: "SELECT * FROM " + TABLE_NAME + " LIMIT 1;",
});
stmt.execute();
var cols=[];
for (i = 1; i <= stmt.getColumnCount(); i++) {
INSERT INTO TABLE1 (Col_Name) VALUES ('+"stmt.getColumnName(i)"+'); //DUPLICATE VALUES
}
return cols
$$;
编辑:
我正在检索 Col_table 的列名,例如 (Col1, Col2, Col3)
,我希望将这些列名放入 TABLE1。
我调用了过程 call get_columns(Col_table)
并将列名插入到 TABLE1 中。
当我再次调用过程 call get_columns(Col_table)
时,TABLE1 将具有重复值 (Col1, Col2, Col3, Col1, Col2, Col3)
。我想通过使用合并或更新或任何其他方法来避免重复。
基于编辑后的问题和评论:
- "When I again call the procedure [...], TABLE1 will have duplicate values [...]. I want to avoid duplication either by using merge or update or if any other method"
- "The INSERT OVERWRITE is replacing the rows of the table when I called the procedure on two different table columns"
然后,如果您不想将重复的值插入现有的 table,您可以这样做:
INSERT INTO TABLE1(Col_Name)
SELECT *
FROM (SELECT 'i' x)
WHERE x NOT IN (SELECT Col_Name FROM TABLE1);
替换您过程中的 SQL 代码,您将不会看到重复的值。将 'i'
替换为您要插入的值。
(作为一般性评论:我不确定问题中的过程是否是解决整体问题的最有效解决方案,但这将解决具有重复行的特定问题)
我编写了一个存储过程来将值插入 table。但是当我两次调用存储过程时,重复的值被插入到 table 中。如何避免存储过程中的值重复。
这是我的存储过程:
CREATE OR REPLACE PROCEDURE get_columns(TABLE_NAME VARCHAR)
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS
$$
var stmt = snowflake.createStatement({
sqlText: "SELECT * FROM " + TABLE_NAME + " LIMIT 1;",
});
stmt.execute();
var cols=[];
for (i = 1; i <= stmt.getColumnCount(); i++) {
INSERT INTO TABLE1 (Col_Name) VALUES ('+"stmt.getColumnName(i)"+'); //DUPLICATE VALUES
}
return cols
$$;
编辑:
我正在检索 Col_table 的列名,例如 (Col1, Col2, Col3)
,我希望将这些列名放入 TABLE1。
我调用了过程 call get_columns(Col_table)
并将列名插入到 TABLE1 中。
当我再次调用过程 call get_columns(Col_table)
时,TABLE1 将具有重复值 (Col1, Col2, Col3, Col1, Col2, Col3)
。我想通过使用合并或更新或任何其他方法来避免重复。
基于编辑后的问题和评论:
- "When I again call the procedure [...], TABLE1 will have duplicate values [...]. I want to avoid duplication either by using merge or update or if any other method"
- "The INSERT OVERWRITE is replacing the rows of the table when I called the procedure on two different table columns"
然后,如果您不想将重复的值插入现有的 table,您可以这样做:
INSERT INTO TABLE1(Col_Name)
SELECT *
FROM (SELECT 'i' x)
WHERE x NOT IN (SELECT Col_Name FROM TABLE1);
替换您过程中的 SQL 代码,您将不会看到重复的值。将 'i'
替换为您要插入的值。
(作为一般性评论:我不确定问题中的过程是否是解决整体问题的最有效解决方案,但这将解决具有重复行的特定问题)