pyspark - 在单个 Glue 作业中的多个表的源端运行 SQL 脚本,并具有与 S3 对应的表命名约定
问题描述
sql_list = ['(select * from table1 where rownum <= 100) alias1','(select * from table2 where rownum <= 100) alias2']
for sql_statement in sql_list: df = spark.read.format("jdbc").option("driver", jdbc_driver_name).option("url", db_url).option("dbtable", sql_statement).option("user", db_username).option("password", db_password).option("fetchSize", 100000).load()
df.write.format("parquet").mode("overwrite").save("s3://s3-location/" + sql_statement)
来源是 Oracle 数据库
我能够运行查询数组并将其存储在镶木地板的 S3 上,但使用的命名与 sql_list 上列出的相同,我想将数据存储到 S3,分别命名为 alias1 和 alias2。
解决方案
考虑使用字典而不是列表,因为这样更简洁灵活。
sql_list = {'alias1':'(select * from table1 where rownum <= 100) alias1',
'alias2': '(select * from table2 where rownum <= 100) alias2'}
for table,sql_statement in sql_list.items():
df = spark.read.format("jdbc").option("driver", jdbc_driver_name)\
.option("url",db_url)\
.option("dbtable", sql_statement)\
.option("user", db_username)\
.option("password", db_password)\
.option("fetchSize",100000).load()
df.write.format("parquet").mode("overwrite").save("s3://s3-location/" + table)
否则你需要做一些肮脏的分裂
df.write.format("parquet").mode("overwrite").save("s3://s3-location/" + sql_statement.split(' ')[-1])
推荐阅读
- vue.js - 如何订阅 Vue 中状态的属性?
- hadoop - 磁盘块大小和 hadoop 块大小
- php - 在php中用星号替换域名
- python - 我们可以访问和替换 xlsx 中的图像吗
- haskell - Fibonacci secuence 无法将预期类型 'a0 -> t' 与实际类型 '[Integer]' 匹配
- android - 屏幕按下(在移动设备上)未在预期元素 Unity 3d 上注册
- mongodb - 解析服务器 - 找不到文件
- html - 使用面临错误的 VBA 从网站中提取超链接
- php - 以混合顺序在表中插入值
- json - python pandas.read_json() 不适用于 IG Labs REST