首页 > 解决方案 > 使用 AirFlow 在两个 RedShift 数据库之间(从一个到另一个)复制数据

问题描述

您能否帮助我了解如何使用 AirFlow(这两个数据库位于一个集群上)在两个 RedShift 数据库之间(从一个到另一个)复制数据。

谢谢。

标签: amazon-web-servicesamazon-redshiftairflow

解决方案


使用 Airflow 没有直接的方法可以做到这一点(除非您自己实现自定义运算符)。

一种可能的方法是将数据从 Redshift 导出到 S3,然后从 S3 导入到第二个 Redshift 实例。

我没有测试它,但这是一般的想法:

from airflow.providers.amazon.aws.transfers.s3_to_redshift import S3ToRedshiftOperator
from airflow.providers.amazon.aws.transfers.redshift_to_s3 import RedshiftToS3Operator

S3_BUCKET = getenv("S3_BUCKET", "my-bucket")

my_dag = DAG(...)

op_transfer_redshift_to_s3 = RedshiftToS3Operator(
    schema="PUBLIC",
    table="my_table",
    s3_bucket=S3_BUCKET,
    unload_options=unload_options, #This is optional if you need to set options
    include_header=True,
    aws_conn_id="aws_conn_id",
    task_id="transfer_redshift_to_s3",
    table_as_file_name=True,
    dag=my_dag,
)

op_transfer_s3_to_redshift = S3ToRedshiftOperator(
    s3_bucket=S3_BUCKET,
    s3_key="my_table",
    schema="PUBLIC",
    table="my_table", #Or any other name you want in the 2nd Redshift
    copy_options=['csv'],
    aws_conn_id="aws_conn_id2", #Connection to the 2nd Redshift
    task_id='transfer_s3_to_redshift',
    dag=my_dag,
)

op_transfer_redshift_to_s3 >> op_transfer_s3_to_redshift 

RedshiftToS3Operator导出 my_table 到 ins3://S3_BUCKET/my_table.csv并将S3ToRedshiftOperator从该路径导入。您将需要概述这两个运算符以了解使用它们需要什么样的设置


推荐阅读