如何在 AWS Athena 中访问嵌套数组和 JSON
How to access nested arrays and JSON in AWS Athena
我正在尝试处理来自 Athena 中的 s3 日志的一些数据,这些数据具有复杂的类型,我不知道如何使用。
我有一个 table 行,例如:
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 将 return JSON ARRAY [{"k1":"value1", "key2":"value2"...}]
而外部 return相关值 value1
另一个类似的选项是使用 CAST(JSON :
SELECT
JSON_EXTRACT_SCALAR(
CAST(JSON '"[{\"k1\":\"value1\", \"key2\":\"value2\"...}]"' as VARCHAR),
'$[0].k1'
)
我正在尝试处理来自 Athena 中的 s3 日志的一些数据,这些数据具有复杂的类型,我不知道如何使用。
我有一个 table 行,例如:
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 将 return JSON ARRAY [{"k1":"value1", "key2":"value2"...}]
而外部 return相关值 value1
另一个类似的选项是使用 CAST(JSON :
SELECT
JSON_EXTRACT_SCALAR(
CAST(JSON '"[{\"k1\":\"value1\", \"key2\":\"value2\"...}]"' as VARCHAR),
'$[0].k1'
)