Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Snowflake cloud data platform 使用Python代码通过AWS Lambda函数调用Snowflake过程_Snowflake Cloud Data Platform - Fatal编程技术网

Snowflake cloud data platform 使用Python代码通过AWS Lambda函数调用Snowflake过程

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

如果有一个Merge语句通过AWS Lambda函数将数据从Stage复制到Snowflake主表,是否可以调用Snowflake过程?我希望在我们将文件推送到S3阶段时立即触发该函数。我们有一个雪堆选项来复制数据,但我不希望另一个表像这样将数据从S3 bucket复制到snowflake stage,然后将其合并到master table,而是我有一个merge语句,它直接将S3 bucket中的文件中的数据合并到snowflake master table。

首先,我将在中创建一个外部stage雪花:

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!你的解决方案似乎很好。我也尝试了一些不同的方法-