雪花云数据平台-使用横向展平函数时与变体列(JSON)的最大偏移量



我有一个表,其中包含两个变量数据类型列(Record_Key、Record_Content("Record_Key"列包含";键ID";以及";偏移";采用JSON格式;Record_Content";还包含实际的JSON消息/事务/有效负载。

关于如何选择Max";偏移";来自";Record_Key"列,同时还使用lateral_flatten函数将上述列中的数据扁平化?

我可以使用子查询来选择最大偏移量吗?或者我应该使用CTE首先压平数据,然后进行最大选择?

给定的子查询是CTE(尽管只能使用一次(。那方面并不重要。

所以如果你的数据看起来像:

SELECT
parse_json('{"Key_ID":"a", "Offset":0}') AS Record_Key
parse_json('{"val_a":"a_a0", "val_b":"b_a0"}') AS Record_Content
SELECT
parse_json('{"Key_ID":"b", "Offset":2}') AS Record_Key
parse_json('{"val_a":"a_b2", "val_b":"b_b2"}') AS Record_Content
SELECT
parse_json('{"Key_ID":"c", "Offset":4}') AS Record_Key
parse_json('{"val_a":"a_c4", "val_b":"b_c4"}') AS Record_Content

因此,从这个数据你想要得到:

key_id, Offset, val_a, val_b
c,      4,      a_c4,  b_c4

因为偏移4是最大的。(这是一个多行的例子,如果你的数据是Record_Key内的数组,你可以FLATTEN(

SELECT 
Record_Key:Key_ID::text as Key_ID
Record_Key:Offset::number as Offset
Record_Content:val_a::text as val_a
Record_Content:val_b::text as val_b
FROM table
QUALIFY ROW_NUMBER() OVER(PARTITION BY Key_ID ORDER BY Offset DESC) = 1

因此,这将从JSON中提取所有行,并且只保留每个Key_ID

如果你的数据形状不同,第一步是获得你想要的数据,然后通过QUALIFY 之类的东西过滤掉你不想要的数据

最新更新