首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建动态框架选项(来自rds - mysql),提供带有where子句的自定义查询

问创建动态框架选项(来自rds - mysql),提供带有where子句的自定义查询
EN

Stack Overflow用户
提问于 2020-02-16 18:48:07
回答 2查看 7.4K关注 0票数 0

我想从Aurora表中在Glue作业中创建一个DynamicFrame。我是否可以使用自定义查询从rds表创建DynamicFrame -有where子句?我不想每次在DynamicFrame中读整张表,然后再过滤。看看这个网站,但没有在这里或其他地方找到任何选择,https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html

构造JDBC连接选项

connection_mysql5_options ={ "url":"jdbc:mysql://:3306/db","dbtable":"test","user":"admin","password":"pwd"}

从MySQL 5中读取DynamicFrame

( glueContext.create_dynamic_frame.from_options(connection_type="mysql",

df_mysql5 = connection_options=connection_mysql5_options)

有没有办法提供where子句,并说只从测试表中选择前100行,比如它有一个名为"id“的列,我想使用这个查询来获取:

从id<100的测试中选择*;

感谢你的帮助。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2021-03-30 15:05:17

我能够提供自定义查询的方式是创建一个火花DataFrame并使用选项:https://spark.apache.org/docs/2.3.0/sql-programming-guide.html#manually-specifying-options来指定它

然后使用上述类将DataFrame转换为DynamicFrame:https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-dynamic-frame.html

代码语言:javascript
复制
tmp_data_frame = spark.read.format("jbdc")
.option("url", jdbc_url)
.option("user", username)
.option("password", password)
.option("query", "select * from test where id<100")
.load()

dynamic_frame = DynamicFrame.fromDF(tmp_data_frame, glueContext)
票数 0
EN

Stack Overflow用户

发布于 2021-05-05 18:27:42

对不起,我本来会发表评论的,但我没有足够的声誉。我能够做出Guillermo AMS在AWS Glue中提供工作的解决方案,但它确实需要两个更改:

"jdbc“格式未被识别(提供的错误是:”"org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider"

  • The :在调用o79.load时发生了错误。:java.lang.ClassNotFoundException:未能找到数据源: jbdc。请在http://spark.apache.org/third-party-projects.html"上查找包) --我不得不使用全名:查询选项不适合我(提供的错误是:"py4j.protocol.Py4JJavaError:调用o72.load时发生了错误。:java.sql.SQLSyntaxErrorException: ORA-00911:无效字符“),但幸运的是,"dbtable”选项支持传入表或子查询--即在查询.周围使用括号。

在下面的解决方案中,我还在所需的对象和导入周围添加了一些上下文。

我的解决方案看起来像是:

代码语言:javascript
复制
from awsglue.context import GlueContext
from pyspark.context import SparkContext

glue_context = GlueContext(SparkContext.getOrCreate())

tmp_data_frame = glue_context.spark_session.read\
  .format("org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider")\
  .option("url", jdbc_url)\
  .option("user", username)\
  .option("password", password)\
  .option("dbtable", "(select * from test where id<100)")\
  .load()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60251975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档