← 학습 카테고리

Learn

ClickHouse

47개 모듈 · 현재 42번째

ClickHouse 모듈 42/47 clickhouse-learn-42

ARRAY JOIN 절 — 배열 하나를 여러 행으로 펼친다

ClickHouse ARRAY JOIN 절 및 max_memory_usage/KILL QUERY 공식 문서 종합 (웹 리서치, 2026) — ClickHouse 공식 문서(sql-reference/statements/select/array-join, knowledgebase/memory-limit-exceeded-for-query) ClickHouse 공식문서 ARRAY JOIN Clause

이 모듈을 다 읽으면

  • clickhouse-learn-18에서 다룬 Array 타입 컬럼을 ARRAY JOIN으로 어떻게 행 단위로 펼치는지 설명할 수 있다
  • 기본 ARRAY JOIN과 LEFT ARRAY JOIN이 빈 배열을 다루는 방식의 차이를 설명할 수 있다

clickhouse-learn-18에서 다룬 Array 타입(한 행 안에 값 여러 개를 담는 컬럼)을 전제로, 그 배열의 원소마다 별도의 행으로 풀어내는 ARRAY JOIN 절을 정리한다.

기본 동작 — N개짜리 배열 하나가 N개의 행이 된다

ARRAY JOIN은 배열 컬럼을 가진 테이블에서, 그 배열의 원소 하나마다 새 행 하나를 만들어내는 연산이다 — 원소 N개짜리 배열을 가진 행 하나는 N개의 행으로 바뀌고, 그 행에 있던 다른 컬럼 값들은 그대로 복제된다. 문법은 FROM 절 뒤, WHERE 앞에 오며(SELECT user_id, tag FROM user_profiles ARRAY JOIN tags AS tag), 한 ARRAY JOIN 절 안에 여러 배열을 동시에 펼치는 것도 가능한데 이때는 배열들을 서로 조합(cross join)하는 게 아니라 같은 인덱스끼리 나란히(zip) 짝짓는 방식으로 동작한다.

핵심 포인트

  • N개짜리 배열이 있는 행 하나 → N개 행으로 확장(다른 컬럼 값은 그대로 복제) — FROM 뒤, WHERE 앞에 위치
  • 여러 배열을 한 ARRAY JOIN에서 동시에 펼치면 조합(cross)이 아니라 같은 인덱스끼리 짝짓는(zip) 방식

LEFT ARRAY JOIN — 빈 배열도 결과에 남긴다

기본 ARRAY JOIN은 배열이 비어있거나(원소 0개) NULL인 행은 결과에서 아예 빠진다 — 펼칠 원소 자체가 없기 때문이다. LEFT ARRAY JOIN은 이와 달리 원본의 모든 행을 보존한다 — 배열이 비어있으면 그 배열 원소 타입의 기본값(보통 0, 빈 문자열, 또는 NULL)으로 채운 행 하나를 대신 만들어낸다. 이 차이는 SQL의 INNER JOIN vs LEFT JOIN이 매칭 안 되는 쪽을 다루는 방식과 정확히 같은 발상이다 — '매칭(펼칠 원소)이 없으면 그냥 빠뜨릴 것인가, 기본값으로 채워서라도 원본 행을 남길 것인가'.

핵심 포인트

  • 기본 ARRAY JOIN: 배열이 비어있거나 NULL인 행은 결과에서 아예 빠짐
  • LEFT ARRAY JOIN: 원본 모든 행 보존 — 빈 배열은 원소 타입 기본값(0/빈문자열/NULL)으로 채운 행 하나를 대신 생성. 일반 INNER JOIN vs LEFT JOIN과 같은 발상