我对DataLakes和Im比较陌生,我正在为AWS上的项目进行一些研究。
我已经创建了一个DataLake并具有从Glue Crawlers生成的表,我可以在S3中看到数据并使用Athena进行查询。到目前为止一切顺利。
需要将存储在数据湖中的部分数据转换为RDS,以便应用程序读取数据。从S3 DataLake到RDS的ETL最佳解决方案是什么?
我遇到的大多数帖子都是关于RDS到S3的ETL,而不是相反。
答案 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)