AWS Glue 始终将 'select * ....' 发送到 SQL 服务器,为什么以及如何更改它?
AWS Glue always send a 'select * ....' to the SQL Server , why and how to change that?
我有一个 aws Glue JDBC 连接到 EC2 服务器中的 SQL 服务器。
爬行整个模式后,我创建了一个作业来查询一些 table 并使用 activity 监视器检查发送到数据库的胶水是什么,查询只是一个 select * 到整个 table...
执行此操作的代码如下:
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 *... 因为想象一下在这个 table 我'有一个 blob 内容,我不需要执行任何转换,为什么我需要通过网络获取所有数据,如果它们不会被使用?
我试图编辑 table 的架构,但没有任何变化...它只发送 select * ...
为什么要强制初始查询成为我想要的?
非常感谢!
将查询下推到数据库引擎是个好主意,因为它可以减少 Glue 作业和网络传输的负载。
如果您想将查询传递给数据库,那么 Glue 中没有支持的原生功能 this.However 您可以通过将数据读入 Spark 数据帧然后将其转换为动态帧以利用 Glue 来实现相同的目的转换。
以下是 mysql 读取的示例,您参考 this 并为 SQL 服务器更改 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()
我有一个 aws Glue JDBC 连接到 EC2 服务器中的 SQL 服务器。 爬行整个模式后,我创建了一个作业来查询一些 table 并使用 activity 监视器检查发送到数据库的胶水是什么,查询只是一个 select * 到整个 table...
执行此操作的代码如下:
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 *... 因为想象一下在这个 table 我'有一个 blob 内容,我不需要执行任何转换,为什么我需要通过网络获取所有数据,如果它们不会被使用?
我试图编辑 table 的架构,但没有任何变化...它只发送 select * ...
为什么要强制初始查询成为我想要的?
非常感谢!
将查询下推到数据库引擎是个好主意,因为它可以减少 Glue 作业和网络传输的负载。
如果您想将查询传递给数据库,那么 Glue 中没有支持的原生功能 this.However 您可以通过将数据读入 Spark 数据帧然后将其转换为动态帧以利用 Glue 来实现相同的目的转换。
以下是 mysql 读取的示例,您参考 this 并为 SQL 服务器更改 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()