-
[ ClickHouse ] arrayMap Function 알아보기Database/Clickhouse 2023. 9. 6. 13:12728x90반응형
- 목차
키워드.
- - ArrayMap
arrayMap 사용해보기.
arrayMap 함수는 Array(String) 와 같은 Array 타입의 데이터를 대상으로 Map Function 을 적용할 수 있습니다.
일종의 Array 의 각 Item 을 변형하는 Mapper 함수와 같이 동작합니다.
간단한 활용 예시는 아래와 같습니다.
user_actions 이라는 이름의 MergeTree 테이블을 생성하였구요.
Array(String) 타입의 action 칼럼을 대상으로 arrayMap 함수를 적용합니다.
create table default.user_actions ( user String, action Array(String), acted_at DateTime ) engine = MergeTree() order by acted_at partition by toYYYYMM(acted_at); insert into default.user_actions (user, action, acted_at) values ('Aeron', ['Click', 'View', 'Remove'], '2024-01-01 00:00:00')
아래 예시는 ['Click', 'View', 'Remove'] 라는 값을 가지는 Array(String) 타입의 action 칼럼에 arrayMap 함수를 적용하였습니다.
map 함수를 사용하여 Map(String, String) 타입으로 action 값을 변형하기 위해서 사용하였구요.
결과적으로 Array(Map(String, String)) 의 타입으로 데이터가 변형됩니다.
select user, arrayMap(x -> map('name', x, 'lower_case', lower(x)), action) as actions from default.user_actions
+-----+---------------------------- |user |actions | +-----+---------------------------- |Aeron|[ | | |{ | | | "name": "Click", | | | "lower_case": "click" | | |}, | | |{ | | | "name": "View", | | | "lower_case": "view" | | |}, | | |{ | | | "name": "Remove", | | | "lower_case": "remove" | | |} | | |] | +-----+----------------------------+
Array(Int) 타입에 arrayMap 적용하기.
이번에는 구매 이력을 기록하는 purchase_log 라는 Table 을 생성합니다.
create table default.purchase_log ( user String, amount Int32, purchased_at DateTime ) engine = MergeTree() order by purchased_at partition by toYYYYMM(purchased_at);
그리고 아래와 같이 Array(Int) 타입의 amounts 칼럼에 대해서 arrayMap 을 적용할 수 있습니다.
아래 예시에서는 간단히 amount 의 10배를 취하는 Mapper Function 을 사용하였습니다.
select user, groupArray(amount) as amounts, arrayMap(x -> x * 10, amounts) as new_amounts from default.purchase_log group by user
둘 이상의 칼럼들을 arrayMap 적용하기.
둘 이상의 칼럼들을 arrayMap 함수를 적용하여 하나의 칼럼으로 병합할 수 있습니다.
아래 예시는 amounts, ten_times_amounts, hundred_times_amounts 라는 3개의 칼럼이 존재합니다.
그리고 둘 이상의 칼럼을 하나의 arrayMap 에 적용할 수 있는데요.
"arrayMap(x, y, z -> x + y + x, col1, col2, col3)" 이와 같은 방식으로 여러 칼럼을 하나의 칼럼으로 병합할 수 있습니다.
select user, groupArray(amount) as amounts, arrayMap(x -> x * 10, amounts) as ten_times_amounts, arrayMap(x -> x * 100, amounts) as hundred_times_amounts, arrayMap(x, y, z -> x + y + x, amounts, ten_times_amounts, hundred_times_amounts) as output from default.purchase_log group by user
아래의 결과에서 output 이라는 이름의 칼럼은 나머지 3개의 칼럼의 값들이 더한 값을 표현합니다.
이는 3개의 칼럼의 각 값들을 Sum 하는 Mapper 함수를 사용하였기 때문입니다.
반응형'Database > Clickhouse' 카테고리의 다른 글
[ClickHouse] Compact Wide Parts 알아보기 ( part_type ) (0) 2024.01.16 [ClickHouse] Block 알아보기 (0) 2024.01.10 ClickHouse MergeTree 알아보기 (0) 2023.11.07 [ ClickHouse ] groupArray Function 알아보기 (0) 2023.09.06 [ ClickHouse ] arrayFlatten Function 알아보기 (0) 2023.01.23