【发布时间】:2021-10-15 13:28:34
【问题描述】:
我正在尝试从以下查询中的列中获取值:
SELECT
json_array_get(transactions.tags,0) as category,
transactions.tags,
transactions.date as transaction_date,
transactions.amount,
CAST(transactions.amount as DECIMAL(20, 2)) as amount_banking,
transactions.balance,
opportunity.osc_score_previous_conduct
FROM "decisionengine"."public"."app_banking_transaction" AS "transactions"
LEFT JOIN
"decisionengine"."public"."app_banking_transactionbankdetail" AS "transactionsDetails"
ON
"transactionsDetails".id = "transactions".transactionBankDetail_id
LEFT JOIN
"decisionengine"."public"."app_banking_bankingdetail" AS "banking"
ON
"transactionsDetails".bankingDetail_id = "banking".id
LEFT JOIN
"decisionengine"."public"."app_banking_opportunitydetail" AS "opportunity"
ON
"banking".opportunity_id = "opportunity".id
LIMIT 5
在标签列上有时会有一个带有节点类别的对象,如果该节点存在于该 JSON 中,我想提取类别的值。
我可以看到 json_array_get 允许我在数组中获得一个位置,有没有办法使用它或者我如何修改我的查询以获得类别的值?
编辑
WITH dataset AS (
SELECT * FROM (SELECT tags FROM "decisionengine"."public"."app_banking_transaction" LIMIT 10) AS t (json_string)
)
SELECT
reduce(
CAST (json_string as ARRAY(MAP(VARCHAR, VARCHAR))),
map(),
(s, x) -> map_concat(s,x),
s -> s
)['category']
FROM dataset
我得到了错误
【问题讨论】:
标签: sql amazon-athena presto