要求是我需要的 从 A 到 I 列的 ID、日期和最大值。 A、B、C、D、E、F、G 列的 MAX 值,我需要 SQL 服务器或 Synapse 查询
已经试过了
select max(A) from (values( A,B,C,D,E,F,G, I)) as A) as Z
这适用于 sql 但不适用于 Azure 突触
答案 0 :(得分:2)
如果我理解正确,您可以使用apply
:
select t.*, v.max_val
from t cross apply
(select max(v.col) as max_val
from (values (a), (b), . . .) v(col)
) v;
答案 1 :(得分:0)
Azure Synapse Analytics 中的无服务器 SQL 池(以前称为按需 SQL)支持 GREATEST
,因此这种类型的查询在无服务器中很容易,例如
SELECT id, dt, GREATEST ( a, b, c, d, e, f, g, h, i ) x
FROM yourTable
对于专用 SQL 池,您可以使用 UNPIVOT
来达到相同的效果:
SELECT id, dt, MAX(x) x
FROM yourTable
UNPIVOT ( x for y In ( a, b, c, d, e, f, g, h, i ) ) AS upvt
GROUP BY id, dt
GREATEST
可能在某些时候添加到专用 SQL 池中,因此可能值得时不时检查一下。
由于 SparkSQL 支持 GREATEST
,您可以做的另一件事是使用 Azure Synapse 笔记本从专用 SQL 池中快速拉取数据,对其进行处理并将其弹出,例如作为批处理的一部分。这是一个使用 Scala 笔记本的简单示例。
单元格 1:
// Get the table from the dedicated SQL pool into a dataframe
val df = spark.read.synapsesql("someSQLPool.dbo.greatestWorking")
// Save the dataframe as a temp view to make it available to SparkSQL
df.createOrReplaceTempView("greatestWorking")
单元格 2:
// Write the result to a new data frame to be saved back into the dedicated SQL pool
val result = spark.sql("SELECT id, dt, GREATEST ( a, b, c, d, e, f, g, h, i ) AS x FROM greatestWorking")
result.write.synapsesql("someSQLPool.dbo.result", Constants.INTERNAL)