azure - 使用 Azure Synapse 无服务器池从外部表中检索每个组中的最后一条记录

标签 azure t-sql greatest-n-per-group azure-synapse

所以问题是“从 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/

相关文章:

javascript - Jquery 事件日历和 Microsoft Azure 问题

azure - 逻辑应用异地复制/灾难恢复

sql-server - TSQL 按顺序循环月份

json - 从 nvarchar 返回 JSON 对象

sql - 如何根据特定顺序选择每个组的顶行?

mysql - 从具有最大/最小值的记录中提取值

SQL - Postgres - 返回最新日期的最大值

json - 在 Azure 数据工厂中处理大型 JSON

azure - 逻辑应用程序中的 Webhook 与 Http 请求

sql - TSQL : Howto add a char to a select statement