데이터엔지니어/etc

[trino] 몽고디비 json형태 꺼내오는 쿼리(feat.unnest)

김태구 2023. 10. 26. 17:53
반응형

몽고DB 데이터 저장

현재 몽고 DB에 아래와 같은 데이터가 저장되어 있습니다. KEY로는 reg_date, user_id, ids가 있으며, ids안에 다시 key:value 형태로 id와 score를 저장하고 있습니다.

{
    "_id" : ObjectId("abcdefg"),
    "reg_date" : "2023-05-07",
    "user_id" : "foo",
    "ids" : [
        {
            "id" : "boo",
            "score" : "100.0"
        },
        {
            "id" : "boo1",
            "score : "80.0"
        }
    ]
}

트리노 몽고DB 조회

트리노에서 위의 몽고 데이터를 조회하게 되면 아래와 같이 나옵니다.

reg_date user_id ids
2023-05-07 foo {{id=boo, score=100.0},{id=boo1, score = 80.0}}

 

문제

앞서 말씀 드린 것과 같이 ids안에는 각각의 id와 score가 key:value형태로 저장되어있습니다. 

이번 포스팅에서는 json형태의 ids안에 key를 각 컬럼 value를 row로 변경해보려 합니다.

reg_date user_id ids
2023-05-07 foo {{id=boo, score=100.0},{id=boo1, score = 80.0}}

                                                                         ▼

reg_date user_id id score
2023-05-07 foo boo 100.0
2023-05-07 foo boo1 80.0

해결

아래와 같이 unnest, cross join을 통해 간단하게 추출할 수 있습니다.

select a.reg_date, a.user_id ,id ,score 
from mongo.db.table a
cross join unnest(ids) as x(id,score)
where reg_date '2023-05-07'
and user_id ='foo'
반응형