使用横向展平函数时与变体列 (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
之类的方式过滤掉您不需要的数据
我有一个 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
之类的方式过滤掉您不需要的数据