【问题标题】:Access "table$partitions" through Spark Sql通过 Spark Sql 访问“table$partitions”
【发布时间】:2021-04-26 17:59:19
【问题描述】:

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

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 上工作?
谢谢

【问题讨论】:

  • 你能用你用过的 spark 脚本更新你的问题吗?
  • select max(run_id) from "database"."table" where &lt;partitions condition here&gt; 怎么样?
  • @pltc run_id 是分区,所以如果我想获得最大值,我无法过滤他。并获得对表执行全扫描的最大值

标签: apache-spark pyspark apache-spark-sql amazon-athena


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-01-22
    • 2020-09-05
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2018-09-07
    • 2022-08-19
    • 2018-05-29
    • 2021-07-01
    相关资源
    最近更新 更多