Apache spark “访问”;表$partitions";通过sparksql
我发现运行以下代码将对表进行完全扫描:Apache spark “访问”;表$partitions";通过sparksql,apache-spark,pyspark,apache-spark-sql,amazon-athena,Apache Spark,Pyspark,Apache Spark Sql,Amazon Athena,我发现运行以下代码将对表进行完全扫描: select max(run_id) from database.table 因此,我将代码切换为使用以下语法: select max(run_id) from "database"."table$partitions" 这个查询在Athena上非常有效,但是当我尝试使用Spark Sql执行它时,我得到以下错误: mismatched input '"database"' expecting
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)
应为不匹配的输入“数据库”(第1行,位置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]
优点:它不会对桌子进行完全扫描缺点:扫描所有分区级别+代码不够优雅。
无论如何,这是我发现的最好的你能用你使用的spark脚本更新你的问题吗?从“数据库”中选择max(运行id)怎么样?“表”中的?@pltc运行id是分区,所以如果我想得到最大值,我不能过滤他。并在表上执行完全扫描以获取最大值