对于较小数据量的ETL作业,AWS Lambda可能更适合。下面是一个Lambda函数的示例代码,将从S3存储桶中读取JSON文件,并返回处理后的结果。
import json
import boto3
s3 = boto3.resource('s3')
def lambda_handler(event, context):
bucket = "my-s3-bucket"
key = "path/to/my/json/file.json"
obj = s3.Object(bucket, key)
data = obj.get()['Body'].read().decode('utf-8')
json_data = json.loads(data)
# 进行ETL处理
return {
"statusCode": 200,
"body": json.dumps(response)
}
对于较大数据集,我们可以考虑使用AWS批处理服务。下面是一个批处理作业定义的示例,用于从S3中导入CSV文件,并将数据加载到Redshift中。
version: 0.3
parameters:
input_s3_uri:
type: String
description: S3路径,包含CSV文件
default: s3://my-bucket/my-input-folder/
cluster_id:
type: String
description: 需要执行批处理作业的Redshift集群的名称
database_name:
type: String
description: 数据库名
default: my_database
table_name:
type: String
description: 要将CSV数据加载到其中的Redshift表格名称
default: my_table
iam_role:
type: String
description: 需要从S3中读取CSV文件的IAM角色
jobs:
- name: load_csv_to_redshift
jobDefinition: "arn:aws:batch:region:aws_account_id:job-definition/load-csv-to-redshift:1"
parameters:
InputS3Uri: !Ref input_s3_uri
ClusterId: !Ref cluster_id
DatabaseName: !Ref database_name
TableName: !Ref table_name
IAMRole: !Ref iam_role