微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 Spark Sql 访问“table$partitions”

如何解决通过 Spark Sql 访问“table$partitions”

我发现运行以下代码将对表进行全面扫描:

select max(run_id) from database.table

所以我切换了我的代码以使用以下语法:

select max(run_id) from "database"."table$partitions"

查询在 Athena 上运行良好,但当我尝试使用 Spark sql 执行它时,出现以下错误

mismatched input '"database"' expecting <EOF>(line 1,pos 24)

似乎 spark sql 将引号标识为查询的结尾。
任何想法如何使这个查询在 spark sql 上工作?
谢谢

解决方法

我对这个问题的解决方案是:

sql_context.sql(f'show partitions {table_name}').agg(
    f.max(f.regexp_extract('partition',rf'''{partition_name}=([^/]+)''',1))).collect()[0][0]

优点:不对表做全扫描
缺点:扫描所有分区级别+代码不优雅。
无论如何,这是我找到的最好的

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。