首页 > 解决方案 > 通过 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 上工作?
谢谢

标签: apache-sparkpysparkapache-spark-sqlamazon-athena

解决方案


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

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

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


推荐阅读