我有一个如下的 JSON 对象
"data": [
{
"keyId": <guid>,
"keyContext":
"keyContextValue":
"https://access.dummy.com/training/date/last_modified_dtm":"2024-02-01 17:02:41",
"https://access.dummy.com/training/id/training_id":"300",
"https://access.dummy.com/training/name/training_name":"Dummy Training"
}
]
我能够使用 Spark SQL 中的 get_json_object 函数提取值直到 KeyContext:KeyContextValue Array。但我的要求是提取该数组中的实际值,如下所示。
密钥ID | 最后修改的_dtm | training_id | 培训名称 |
---|---|---|---|
2024-02-01 | 300 | 假人训练 |
由于密钥是一个 URL,我不知道如何提取该值。有人可以协助如何使用 Spark SQL 来实现这一目标吗?
请找到
simple
逻辑。尝试了不同的方式。
您所需要的只是
从 json 对象中提取所需列的架构。
'data ARRAY<STRUCT<keyContext: STRUCT<keyContextValue: MAP<STRING, STRING>>, keyId: STRING>>'
最终输出列的架构。
'last_modified_dtm timestamp, training_id int, training_name string'
然后利用
from_json
等内置函数从 json 中提取列,并使用 from_csv
来转换所需的输出。
SELECT
inline(
transform(
from_json(
data,
'data ARRAY<STRUCT<keyContext: STRUCT<keyContextValue: MAP<STRING, STRING>>, keyId: STRING>>'
).data.keyContext.keyContextValue,
e -> from_csv(
concat_ws(',', map_values(e)),
'last_modified_dtm timestamp, training_id int, training_name string'
)
)
)
FROM <table_name>