如何在AWS Glue中通过现有连接执行Aurora MySQL的TRUNCATE与LOAD命令?
解决方案
方法1:Glue Python作业执行原生SQL
直接通过Glue Python作业调用MySQL原生命令,跳过可视化ETL转换,利用原生LOAD DATA的高效性:
- 创建Glue Python作业,选择具备以下权限的IAM角色:Aurora MySQL访问权限、S3读取权限、Glue连接访问权限
- 编写作业脚本,复用已配置的Glue连接获取数据库信息,执行SQL命令:
import pymysql from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) # 替换为你的Glue连接名称 conn_conf = glueContext.extract_jdbc_conf("Aurora-MySQL-Connection") # 建立数据库连接 db_conn = pymysql.connect( host=conn_conf['host'], user=conn_conf['user'], password=conn_conf['password'], database='你的数据库名', port=int(conn_conf['port']) ) try: with db_conn.cursor() as cursor: # 执行TRUNCATE cursor.execute("TRUNCATE TABLE 目标表名;") db_conn.commit() # 执行LOAD DATA FROM S3,根据你的文件格式调整参数 load_cmd = """ LOAD DATA FROM S3 's3://你的存储桶/文件路径/11gb文件.txt' INTO TABLE 目标表名 FIELDS TERMINATED BY '|' -- 替换为你的字段分隔符 LINES TERMINATED BY '\\n' IGNORE 1 LINES; -- 如果文件包含表头则添加 """ cursor.execute(load_cmd) db_conn.commit() finally: db_conn.close()
- 配置作业超时时间(Glue作业支持最长48小时,完全满足11GB文件加载需求)
方法2:简化Glue可视化作业配置
保留Glue作业框架,去掉冗余转换步骤:
- 在Glue可视化作业的JDBC目标节点中,设置预操作为
TRUNCATE TABLE 目标表名; - 直接将S3文件作为数据源,选择"直接JDBC写入"模式,让Glue调用MySQL高效写入逻辑
- 前提:Aurora已配置S3集成(关联具备S3访问权限的IAM角色,参数组设置
aws_default_s3_role)
关键注意事项
- 必须为Aurora MySQL关联IAM角色,授予
s3:GetObject权限,确保数据库能直接访问S3文件 - 临时提升Aurora实例规格、调整InnoDB缓冲池大小,可加快大文件加载速度
- 通过CloudWatch日志监控SQL执行进度,快速排查权限、文件格式等问题
内容的提问来源于stack exchange,提问作者Nicolás Lope de Barrios
相关产品推荐
相关产品推荐

