Snowflake cloud data platform 使用Python代码通过AWS Lambda函数调用Snowflake过程
如果有一个Merge语句通过AWS Lambda函数将数据从Stage复制到Snowflake主表,是否可以调用Snowflake过程?我希望在我们将文件推送到S3阶段时立即触发该函数。我们有一个雪堆选项来复制数据,但我不希望另一个表像这样将数据从S3 bucket复制到snowflake stage,然后将其合并到master table,而是我有一个merge语句,它直接将S3 bucket中的文件中的数据合并到snowflake master table。首先,我将在中创建一个外部stage雪花:Snowflake cloud data platform 使用Python代码通过AWS Lambda函数调用Snowflake过程,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,如果有一个Merge语句通过AWS Lambda函数将数据从Stage复制到Snowflake主表,是否可以调用Snowflake过程?我希望在我们将文件推送到S3阶段时立即触发该函数。我们有一个雪堆选项来复制数据,但我不希望另一个表像这样将数据从S3 bucket复制到snowflake stage,然后将其合并到master table,而是我有一个merge语句,它直接将S3 bucket中的文件中的数据合并到snowflake master table。首先,我将在中创建一个外部stag
CREATE STAGE YOUR_STAGE_NAME
URL='s3://your-bucket-name'
CREDENTIALS = (
AWS_KEY_ID='xxx'
AWS_SECRET_KEY='yyy'
)
FILE_FORMAT = (
TYPE=CSV
COMPRESSION=AUTO,
FIELD_DELIMITER=',',
SKIP_HEADER=0,
....
);
然后,我将在阶段中使用python lambda脚本调用对csv文件的查询,从python事件负载中提取文件名:
WITH file_data AS (
select t.$1, t.$2,<etc..> from @YOUR_STAGE_NAME/path/your-file.csv t
)
MERGE INTO MASTER_TABLE USING FILE_DATA ON <......>
如果愿意,您应该能够将其包装到存储过程中。还有一种语法可以跳过创建命名的外部阶段,并在查询调用中引用bucket名称和凭据,但我不建议这样做,因为这样会在存储过程定义中以明文形式公开aws凭据我建议为此使用SnowPipe。AWS Lambda对它的运行时间有限制,我认为是15分钟。如果您的处理需要更多时间,它将超时。我相信snow pipe没有使用合并操作的灵活性,因为它只支持从stage到主表的复制操作,但为了减少额外的计算和额外的空间,我尝试直接从S3 stage到Snowflake主表使用合并操作。如果持续时间是一个问题,我可以考虑将文件拆分为小文件。谢谢Danny!你的解决方案似乎很好。我也尝试了一些不同的方法-