Amazon web services 使用复制功能自动将数据加载到红移
Amazon Redshift文档指出,将数据加载到数据库中的最佳方法是使用COPY函数。如何每天自动运行它,并将数据文件上载到S3Amazon web services 使用复制功能自动将数据加载到红移,amazon-web-services,amazon-s3,amazon-redshift,Amazon Web Services,Amazon S3,Amazon Redshift,Amazon Redshift文档指出,将数据加载到数据库中的最佳方法是使用COPY函数。如何每天自动运行它,并将数据文件上载到S3 更长的版本:我启动了一个红移集群并设置了数据库。我已经创建了一个S3 bucket并上传了一个CSV文件。现在,从红移查询编辑器中,我可以轻松地手动运行复制功能。如何实现自动化?您可以在存储桶上创建一个外部表。红移会自动扫描bucket中的所有文件。但请记住,查询的性能可能不如通过复制加载数据时的性能好,但您获得的好处是不需要调度器 此外,一旦您有了一个外部表,您
更长的版本:我启动了一个红移集群并设置了数据库。我已经创建了一个S3 bucket并上传了一个CSV文件。现在,从红移查询编辑器中,我可以轻松地手动运行复制功能。如何实现自动化?您可以在存储桶上创建一个外部表。红移会自动扫描bucket中的所有文件。但请记住,查询的性能可能不如通过复制加载数据时的性能好,但您获得的好处是不需要调度器
此外,一旦您有了一个外部表,您可以将其加载一次,并将单个
CREATE table作为SELECT。。。从您的\u外部\u表中
。这种方法的好处是它是幂等的——你不需要跟踪你的文件——它总是加载来自桶中所有文件的所有数据。 在你完成你的方法之前,你应该考虑以下要点:
PGPASSWORD=<password> psql -h <host> -d <dbname> -p 5439 -U <username> -c "copy <table_name> from 's3://<bucket>/<table_dir_path>/' credentials 'aws_iam_role=<iam role identifier to ingest s3 files into redshift>' delimiter ',' region '<region>' GZIP COMPUPDATE ON REMOVEQUOTES IGNOREHEADER 1"
PGPASSWORD=psql-h-d-p 5439-U-c“从's3:///'凭证'aws_iam_角色='delimiter','region''GZIP在REMOVEQUOTES IGNOREHEADER 1上计算更新”
下一步是创建lambda并通过红移s3 bucket启用sns,一旦您在s3 bucket接收到新文件,这个sns就会触发lambda。另一种方法是将cloudwatch调度程序设置为运行lambda
可以创建Lambda(java/python或任何lang),它读取s3文件,连接到redshift,并使用copy命令将文件摄取到表中
兰博达有15分钟的限制,如果这是你关心的问题,那么法尔盖特会更好。在EC2上运行作业将导致比lambda或fargate更多的计费(以防您忘记关闭EC2机器)您有几个选择!最简单的方法是设置一个cron作业,每天在某个特定时间在ec2实例上运行,cron作业将使用psql运行复制命令谢谢,我将研究psql。您可以编写一个lambda函数,每当文件上传到bucket中时,触发器都会运行它。这是几行代码,我在这种情况下使用python和boto3 Lambda可以,但15分钟后会超时。@MiloBellano我在哪里编写那些Lambda函数?