Databricks SQL 查询在比较日期时间时非常慢

问题描述 投票:0回答:1

在 Databricks SQL 中,我有一个需要永远执行的查询,在我们的旧系统中,该查询不会花费超过 2 小时(即使对于这部分查询,也需要 4 分钟)。我已将问题追溯到以下部分,它一直卡在日期时间比较上。如果我注释掉带有日期时间的部分,则只需不到 2 分钟即可执行。
额外信息:
表_x 的大小:28.000
table_y 的大小:23.500.000
表_z 的大小:19
日期时间值示例:2020-10-19T14:40:00.000
旧系统使用 OUTER APPLY 而不是 LEFT JOIN LATERAL,但这应该不是问题?
查询:

SELECT
    count(1)
FROM table_x
LEFT JOIN LATERAL (SELECT
        SUM(col_x)
    FROM table_y
    INNER JOIN table_z
        ON table_y.z_id = table_z.`id`
    WHERE table_y.col_y = table_x.col_y
    AND table_y.`DATE` >= table_x.DAYDATEFROM
    AND table_y.`DATE` < table_x.DAYDATEUNTIL
) xyz_data

我尝试注释掉日期时间,效果非常好。然后使用 table_y.DATE 中的值示例进行 where 过滤,据我尝试使用一些示例,这也不会导致任何问题或重复。 还有其他我可以尝试的策略吗?或者是否存在我没有发现的已知问题?
编辑:将列转换为 TIMESTAMP 似乎也没有帮助

sql datetime databricks databricks-sql
1个回答
0
投票

您可以对字段进行分区,请参阅https://docs.databricks.com/en/tables/partitions.html

这里说它们是某种索引:Databricks (Spark SQL) 表的索引

因此,如果您可以按日期对表进行分区,那么基于这些日期的过滤器将会更快。

您需要确保您的日期字段确实也是日期类型。

© www.soinside.com 2019 - 2024. All rights reserved.