从AWS DataLake到RDS的ETL

时间:2019-11-08 11:21:58

标签: amazon-web-services amazon-s3 etl amazon-rds data-lake

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

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

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

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

一旦数据位于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将数据写入。

答案 2 :(得分:0)

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

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)