从AWS DataLake到RDS的ETL

我对DataLakes和Im比较陌生,我正在为AWS上的项目进行一些研究。

我已经创建了一个DataLake并具有从Glue Crawlers生成的表,我可以在S3中看到数据并使用Athena进行查询。到目前为止一切顺利。

需要将存储在数据湖中的部分数据转换为RDS,以便应用程序读取数据。从S3 DataLake到RDS的ETL最佳解决方案是什么?

我遇到的大多数帖子都是关于RDS到S3的ETL,而不是相反。

xinfukanghe 回答:从AWS DataLake到RDS的ETL

通过使用Spark作业类型创建Glue作业,我能够将S3表用作数据源,并将Aurora / MariaDB用作目标。

尝试使用python作业类型进行相同操作不允许我在“胶水作业向导”屏幕中查看任何S3表。

,

一旦数据位于Spark DataFrame的Glue DataFrame中,将其冲洗掉非常简单。将RDBMS用作数据接收器。

例如,要写入Redshift数据库,

// Write data to staging table in Redshift
glueContext.getJDBCSink(
  catalogConnection = "redshift-glue-connections-test",options = JsonOptions(Map(
    "database" -> "conndb","dbtable" -> staging,"overwrite" -> "true","preactions" -> "<another SQL queries>","postactions" -> "<some SQL queries>"
  )),redshiftTmpDir = tempDir,transformationContext = "redshift-output"
).writeDynamicFrame(datasetDf)

如上所示,使用创建的JDBC Connection将数据写入。

,

您可以通过胶水作业来完成。示例代码:

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext,SparkConf
from awsglue.context import GlueContext
from awsglue.job import Job
import time
from pyspark.sql.types import StructType,StructField,IntegerType,StringType

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

file_paths = ['path']


df = glueContext.create_dynamic_frame_from_options("s3",{'paths': file_paths},format="csv",format_options={"separator": ",","quoteChar": '"',"withHeader": True})


df.printSchema()

df.show(10)

options = {
'user': 'usr','password': 'pwd','url': 'url','dbtable': 'tabl'}


glueContext.write_from_options(frame_or_dfc=df,connection_type="mysql",connection_options=options)
本文链接:https://www.f2er.com/3138354.html

大家都在问