apache-spark - 通过 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]
优点:它没有对表进行全面扫描
缺点:它扫描所有分区级别+代码不优雅。
无论如何,这是我找到的最好的