【问题标题】:S3 file to Mysql AWS via AirflowS3 文件通过 Airflow 到 Mysql AWS
【发布时间】:2020-01-26 21:27:21
【问题描述】:

过去几个月我一直在学习如何使用 Apache-Airflow,想看看是否有人有将 CSV 文件从 S3 传输到 AWS(RDS) 中的 Mysql 数据库的经验。或者从我的本地驱动器到 MySQL。

我设法使用airflow.hooks.S3_hook 将所有内容发送到S3 存储桶以将它们存储在云中,并且效果很好。我用 boto3 来做到这一点。 现在我想将此文件推送到我在 RDS 中创建的 MySQL 数据库中,但我不知道该怎么做。我是否需要使用 MySQL 钩子并在那里添加我的凭据,然后编写一个 python 函数?

另外,不一定要S3到Mysql,如果更简单的话,我也可以尝试从本地驱动器到Mysql。

任何帮助都会很棒!

【问题讨论】:

  • 从未在亚马逊上使用过 MySQL。但是那里的 MySQL 应该支持LOAD DATA LOCAL syntax,假设亚马逊没有从源代码中删除它并且在没有的情况下编译它,它可以非常快速地导入 CSV。
  • 但是请记住,当使用 LOCAL 选项时,您的 MySQL 客户端必须首先在 Internet 连接速度较慢的情况下将文件上传到服务器,当 wait_timeout/interactive_timeout 设置为时,MySQL 可能会在上传到大文件时断开连接到低.. 所以你可能想在运行时用SET SESSION wait_timeout= <big_value>; SET SESSION interactive_timeout = <big_value>; 改变它......也不确定服务器/客户端中的 MySQL 协议或 amazone 防火墙是否会限制这些文件的上传/下载速度以节省其他客户端的带宽。
  • 使用 Postgress 会更好吗?你有什么推荐的?

标签: python mysql amazon-s3 airflow


【解决方案1】:

Airflow 有S3ToMySqlOperator,可以通过以下方式导入:

from airflow.providers.mysql.transfers.s3_to_mysql import S3ToMySqlOperator

请注意,您需要安装 MySQL 提供程序。

对于 Airflow 1.10 系列 (backport version):

pip install apache-airflow-backport-providers-mysql

对于 Airflow >=2.0regular version 目前处于测试阶段):

pip install apache-airflow-providers-mysql

示例用法:

S3ToMySqlOperator(
    s3_source_key='myfile.csv',
    mysql_table='myfile_table',
    mysql_duplicate_key_handling='IGNORE',
    mysql_extra_options="""
            FIELDS TERMINATED BY ','
            IGNORE 1 LINES
            """,
    task_id= 'transfer_task',
    aws_conn_id='aws_conn',
    mysql_conn_id='mysql_conn',
    dag=dag
)

【讨论】:

  • 嘿,Elad,我正在尝试使用它,但是当我运行 DAG 时,我得到 'MySQLdb._exceptions.OperationalError: (2068, 'LOAD DATA LOCAL INFILE file request 由于访问限制而被拒绝。 ')'。现在用户似乎无权将文件加载到 RDS AWS 数据库中的表中。我不知道如何给用户这个权利。你也有这个问题吗?如果是,您是否设法解决了这个问题?
猜你喜欢
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 2018-01-21
相关资源
最近更新 更多