aws glue总是向sql服务器发送一个select*…,为什么以及如何更改它?

gg58donl  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(212)

我在ec2服务器中有一个到sql服务器的aws-glue jdbc连接。在遍历整个模式之后,我创建了一个作业来查询某个表,并使用活动监视器来检查glue发送到数据库的内容,这些查询只是整个表中的一个select*。。。
代码如下:

spark_context = SparkContext.getOrCreate()
glue_context = GlueContext(spark_context)    
dynamic_frame = glue_context.create_dynamic_frame.from_catalog(database=glue_db, table_name=table_name)

我的问题是,如何将此请求更改为类似“select column1,column2 from table_name”,而不是select*。。。因为假设在这个表上有一个blob内容,我不需要执行任何转换,如果它们不被使用,为什么我需要通过网络获取所有数据?
我试图编辑表的模式,但没有任何更改。。。它只发送select*。。。
为什么要强制初始查询是我想要的?
谢谢!

v1uwarro

v1uwarro1#

将查询下推到db引擎是一个好主意,因为它可以减少粘合作业的负载,还可以减少网络传输。
如果要将查询传递给db,则glue中没有支持此功能的本机功能。但是,可以通过将数据读入spark dataframe,然后将其转换为dynamicframe到levarage glue转换来实现。
下面是mysql read的一个示例,您可以参考这个示例并更改sqlserver的jdbc url。

query= "(select ab.id,ab.name,ab.date1,bb.tStartDate from test.test12 ab join test.test34 bb on ab.id=bb.id where ab.date1>'" + args['start_date'] + "') as testresult"

datasource0 = spark.read.format("jdbc").option("url", "jdbc:mysql://host.test.us-east-2.rds.amazonaws.com:3306/test").option("driver", "com.mysql.jdbc.Driver").option("dbtable", query).option("user", "test").option("password", "Password1234").load()

相关问题