amazon-web-services - 使用 AirFlow 在两个 RedShift 数据库之间(从一个到另一个)复制数据
问题描述
您能否帮助我了解如何使用 AirFlow(这两个数据库位于一个集群上)在两个 RedShift 数据库之间(从一个到另一个)复制数据。
谢谢。
解决方案
使用 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
从该路径导入。您将需要概述这两个运算符以了解使用它们需要什么样的设置
推荐阅读
- html - 此表可访问性是否安全
- css - 动画 SVG 路径的 stroke-dashoffset 导致 Safari 中的性能极度下降
- python - 我无法使用 cv2 的 VideoCapture 打开网络摄像头
- python - 如何在 Python 中创建 csv 时修复“没有这样的文件或目录”错误
- c++ - 如何检测地图迭代器中的最后一个元素
- python - Pandas - 应用于 lambda 函数的列中位数
- java - HK2InjectionManager 带球衣,使用 OpenJDK11 升级
- apache - AWS EC2 Apache 服务器正在运行,无法 ping/无法通过 Web 服务器访问
- c++ - 更好的方式来组织类之间的继承和关系
- python - 复制单元格包含多条数据的行