我正在构建供个人使用的BULK UPSERT功能。我目前正在将多个文件上传到S3,然后使用CREATE STAGE
命令创建一个舞台。
CREATE OR REPLACE TEMPORARY STAGE {stage}
URL={s3_dir}
CREDENTIALS=(aws_key_id='{aws_key_id}' aws_secret_key='{aws_secret_key}')
{file_format}
现在,我想使用此阶段在Snowflake的目标表中进行UPSERT。有人可以提供一个例子吗?
TIA
答案 0 :(得分:1)
Snowflake将MERGE命令用于UPSERT。我相信您可以在下面找到示例:
https://support.snowflake.net/s/article/how-to-perform-a-mergeupsert-from-a-flat-file-staged-on-s3
这是实际的合并文档:
答案 1 :(得分:0)
显然,MERGE支持以下类型的DB对象将数据从源移动到目标。支持的来源是:
以下是我在代码库中使用的SQL代码段:
CREATE OR REPLACE TEMPORARY STAGE DUMMY_STAGE
FILE_FORMAT=(
TYPE=CSV
COMPRESSION=AUTO
FIELD_DELIMITER='^'
VALIDATE_UTF8=TRUE
EMPTY_FIELD_AS_NULL=TRUE
ENCODING=UTF8
ERROR_ON_COLUMN_COUNT_MISMATCH=FALSE
RECORD_DELIMITER='\r\n'
ESCAPE=NONE
ESCAPE_UNENCLOSED_FIELD=NONE
FIELD_OPTIONALLY_ENCLOSED_BY='"'
NULL_IF = ('0000-00-00', '', 'None')
);
PUT file://data_files/random.txt @DUMMY_STAGE;
MERGE INTO DUMMY_A
USING
(
SELECT
$1 foo
, $2 bar
FROM @DUMMY_STAGE
) DUMMY_TMP
ON
DUMMY_A.FOO=DUMMY_TMP.FOO
WHEN MATCHED THEN
UPDATE SET
foo = DUMMY_TMP.foo
WHEN NOT MATCHED THEN
INSERT
(
foo
, bar
)
VALUES
(
DUMMY_TMP.foo
, DUMMY_TMP.bar
)
;