AWS中国云中的ETL之从Amazon Glue Data Catalog搬数据到MySQL(Glue版)

问题

现在需要从Amazon Glue Data Catalog定时T+1聚合查询结果保存到MySQL中。

准备可以读写的数据库连接

首先登录mysql,创建拥有读写的数据库用户:

sql 复制代码
create database 用户名 default character set utf8mb4 collate utf8mb4_unicode_ci;
create user '用户名'@'%' identified by '密码';
grant all privileges on 数据库名.* to '用户名'@'%';
flush privileges;

准备好数据库之后,然后,我们在 AWS Glue中创建数据库连接。可以参考这篇文章:AWS中国云中的ETL之从aurora搬数据到s3(Glue版)

准备一个mysql测试表

sql 复制代码
# glue写入数据调试空表
CREATE TABLE debug_table_01 (
                                id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键,用于追踪数据行',
                                job_run_id VARCHAR(100) COMMENT 'Glue作业的Run ID,用于区分每次运行',
                                source_column_1 VARCHAR(255) COMMENT '示例字段1,模拟字符串数据',
                                source_column_2 INT COMMENT '示例字段2,模拟整数数据',
                                source_column_3 DECIMAL(10, 2) COMMENT '示例字段3,模拟金额或浮点数据',
                                processed_at DATETIME DEFAULT (CONVERT_TZ(NOW(), '+00:00', '+08:00')) COMMENT '数据写入时间,自动记录'
) COMMENT='用于接收AWS Glue或Athena写入结果的调试表';

创建AWS Glue任务

开始创建Glue 任务

这个纯代码的ETL任务,就是pyspark实现。

设置ETL数据库连接

这里主要是设置数据库连接和运行job角色。

pyspark实现

python 复制代码
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue import DynamicFrame

def sparkSqlQuery(glueContext, query, mapping, transformation_ctx) -> DynamicFrame:
    for alias, frame in mapping.items():
        frame.toDF().createOrReplaceTempView(alias)
    result = spark.sql(query)
    return DynamicFrame.fromDF(result, glueContext, transformation_ctx)

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# Script generated for node dev-Amazon Glue Data Catalog
devAmazonGlueDataCatalog_node1769417028575 = glueContext.create_dynamic_frame.from_catalog(database="dev_hf_gc", table_name="my_table_name", transformation_ctx="devAmazonGlueDataCatalog_node1769417028575")

# Script generated for node SQL Query
SqlQuery0 = '''
SELECT 
    -- id 字段是自增主键,由MySQL自动生成,这里不插入
    'glue-job-run-001' as job_run_id, -- 模拟一个作业ID
    'test_string' as source_column_1, -- 模拟字符串数据
    100 as source_column_2,           -- 模拟整数数据
    999.99 as source_column_3         -- 模拟金额数据
    -- processed_at 字段有默认值,由MySQL自动生成,这里不插入
FROM myData
LIMIT 5 -- 先只插入5条测试数据,避免意外写入大量数据

'''
SQLQuery_node1769417077264 = sparkSqlQuery(glueContext, query = SqlQuery0, mapping = {"myData":devAmazonGlueDataCatalog_node1769417028575}, transformation_ctx = "SQLQuery_node1769417077264")

glueContext.write_dynamic_frame_from_options(
    frame=SQLQuery_node1769417077264, 
    connection_type="mysql",
    connection_options = {
        "useConnectionProperties": "true",
        "dbtable": "debug_table_01",
        "connectionName": "Dev-spring Aurora connection"
    }
)


job.commit()

这里就是模拟从AWS Glue Data Catalog中读取到数据后,然后,通过jdbc连接写入数据到mysql数据库中。

参考

相关推荐
Aurora-Borealis.2 小时前
Day44 简单CNN
python
【赫兹威客】浩哥2 小时前
【赫兹威客】伪分布式Spark测试教程
大数据·分布式·spark
wangmengxxw2 小时前
SpringAI-MySQLMcp服务
java·人工智能·mysql·大模型·sse·springai·mcp
总有刁民想爱朕ha2 小时前
Python YOLOv8 进阶教程
开发语言·python·yolo
葱明撅腚2 小时前
shapely空间数据分析
python·pandas·gis·shapely
A懿轩A2 小时前
【2026 最新】Python 与 PyCharm 详细下载安装教程 带图展示(Windows 版)
windows·python·pycharm
John Song2 小时前
miniconda是否初始化?
linux·运维·服务器·python
花间相见2 小时前
【AI开发】—— LangChain框架
人工智能·python·langchain
what丶k2 小时前
MySQL读写分离部署配置全解析(从原理到落地)
数据库·分布式·mysql