在 GreenPlum 中插入
Upserting in GreenPlum
如何在从 CSV 文件复制数据时在 GreenPlum 中更新记录。 CSV 文件对于给定的主键值有多个记录。如果数据库中已经存在具有某个值的行,我想更新该记录。否则,它应该追加一个新行。
执行此操作的一种方法是将数据复制到分段 table,然后从 table。
insert/update
这是一个例子:
-- Duplicate the definition of your table.
CREATE TEMP TABLE my_table_stage (LIKE my_table INCLUDING DEFAULTS);
-- Your COPY statment
COPY my_table FROM 'my_file.csv' ...
-- Insert any "new" records
INSERT INTO my_table (key_field, data_field1, data_field2)
SELECT
stg.key_field,
stg.data_field1,
stg.data_field2
FROM
my_table_stage stg
WHERE
NOT EXISTS (SELECT 1 FROM my_table WHERE key_field = stg.key_field);
-- Update any existing records
UPDATE my_table orig
SET
data_field1 = stg.data_field1,
data_field2 = stg.data_field2
FROM
my_table_stage stg
WHERE
orig.key_field = stg.keyfield;
如何在从 CSV 文件复制数据时在 GreenPlum 中更新记录。 CSV 文件对于给定的主键值有多个记录。如果数据库中已经存在具有某个值的行,我想更新该记录。否则,它应该追加一个新行。
执行此操作的一种方法是将数据复制到分段 table,然后从 table。
insert/update这是一个例子:
-- Duplicate the definition of your table.
CREATE TEMP TABLE my_table_stage (LIKE my_table INCLUDING DEFAULTS);
-- Your COPY statment
COPY my_table FROM 'my_file.csv' ...
-- Insert any "new" records
INSERT INTO my_table (key_field, data_field1, data_field2)
SELECT
stg.key_field,
stg.data_field1,
stg.data_field2
FROM
my_table_stage stg
WHERE
NOT EXISTS (SELECT 1 FROM my_table WHERE key_field = stg.key_field);
-- Update any existing records
UPDATE my_table orig
SET
data_field1 = stg.data_field1,
data_field2 = stg.data_field2
FROM
my_table_stage stg
WHERE
orig.key_field = stg.keyfield;