如何解决通过 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 举报,一经查实,本站将立刻删除。