使用横向展平函数时与变体列 (JSON) 的最大偏移量

Max offset from a variant column (JSON) while using lateral flatten function

我有一个 table,其中包含两个变体数据类型列(Record_Key、Record_Content)。 “Record_Key”列包含 JSON 格式的“Key_ID”和“偏移”,“Record_Content”还包含实际的 JSON message/transaction/Payload .

关于如何 select 从“Record_Key”列最大“偏移”记录,同时使用 lateral_flatten 函数展平上述列中的数据,有什么想法吗?

我可以使用子查询来 select 最大偏移量吗?或者我应该使用 CTE 来第一次压平数据然后最大 select?

假设子查询是 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 中的数组,您可以将其展平)

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

之类的方式过滤掉您不需要的数据