我正在尝试处理来自 Athena 中 s3 日志的一些数据,这些数据具有我无法弄清楚如何使用的复杂类型。
我有一个表,其中包含以下行:
data
____
"[{\"k1\":\"value1\", \"key2\":\"value2\"...}]"
我想将其视为(1)一个数组以提取第一个元素,然后将第一个元素作为它的 JSON。
一切都很混乱,因为数据自然是一个字符串,包含一个数组,包含 json,我什至不知道从哪里开始
我正在尝试处理来自 Athena 中 s3 日志的一些数据,这些数据具有我无法弄清楚如何使用的复杂类型。
我有一个表,其中包含以下行:
data
____
"[{\"k1\":\"value1\", \"key2\":\"value2\"...}]"
我想将其视为(1)一个数组以提取第一个元素,然后将第一个元素作为它的 JSON。
一切都很混乱,因为数据自然是一个字符串,包含一个数组,包含 json,我什至不知道从哪里开始
您可以使用以下 JSON 命令组合:
SELECT
JSON_EXTRACT_SCALAR(
JSON_EXTRACT_SCALAR('"[{\"k1\":\"value1\", \"key2\":\"value2\"...}]"','$'),
'$[0].k1'
)
内部JSON_EXTRACT_SCALAR将返回 JSON ARRAY [{"k1":"value1", "key2":"value2"...}]
,外部将返回相关值value1
另一个类似的选项是使用CAST(JSON:
SELECT
JSON_EXTRACT_SCALAR(
CAST(JSON '"[{\"k1\":\"value1\", \"key2\":\"value2\"...}]"' as VARCHAR),
'$[0].k1'
)