所以问题是“从 Synapse 无服务器池上托管的大型外部表获取最后一条记录的最佳方法是什么?”
该表有一个作为主键的列键,还有另一个时间戳列,例如:
col_key | col_a | col_b | col_date
a1 val1 val2 2018-03-05T18:24:40.228+00:00
a1 val10 val2 2018-03-06T18:24:40.228+00:00
a1 val12 val29 2018-03-07T18:24:40.228+00:00
a2 val1 val2 2018-03-04T18:24:40.228+00:00
a2 val1 val2 2018-03-05T18:24:40.228+00:00
a2 val1 val42 2018-03-09T18:24:40.228+00:00
a3 val1 val2 2018-03-05T18:24:40.228+00:00
a3 val1 val9 2018-03-07T18:24:40.228+00:00
a3 val1 val32 2018-03-08T18:24:40.228+00:00
因此查询将返回一个压缩表:
col_key | col_a | col_b | col_date
a1 val12 val29 2018-03-07T18:24:40.228+00:00
a2 val1 val42 2018-03-09T18:24:40.228+00:00
a3 val1 val32 2018-03-08T18:24:40.228+00:00
不能使用spark; ¿可以使用什么样的性能良好的优化查询?
最佳答案
最好的方法取决于您拥有的数据量以及数据的组织方式。在这种情况下,最好的起点可能是通过按函数 row_number() 排名并按 col_date 排序分区来进行查询。您可以使用如下查询来完成此操作:
SELECT col_key, col_a, col_b, col_date
FROM (
SELECT
col_key, col_a, col_b, col_date,
ROW_NUMBER() OVER (PARTITION BY col_key ORDER BY col_date DESC) as rn
FROM
OPENROWSET(...your pointer to data here...
) AS sortedresult
) finalresult where finalresult.rn=1
当然,实际性能和成本详细信息取决于您存储查询数据的实际方式以及您对“良好性能”的定义。借助 Azure Synapse Analytics,您拥有无限的可扩展性,并且如果您不针对查询成本进行优化,那么通过它和即用即付定价,您将需要无限的钱包。因此,请使用您的真实数据检查查询的执行方式及其成本。如果没有真实数据,优化这一点就没有意义。
与此相关的更多信息可以在这里找到:
关于azure - 使用 Azure Synapse 无服务器池从外部表中检索每个组中的最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69601222/