맵 함수

맵 함수 (Map / Tuple-map functions)

맵(Map) 데이터 구조를 다루는 함수들이에요. 맵 생성, 키-값 쌍 추출, 요소 접근·존재 확인, 정렬, 변환 등을 지원합니다.

출처: 문서

본문

다음은 맵(Map)과 관련된 함수들입니다.

extractKeyValuePairs

도입 버전: v23.4.0

어떤 문자열에서든 키-값 쌍을 추출합니다. 문자열이 완전히 키-값 쌍 형식일 필요는 없습니다. 노이즈(예: 로그 파일)가 섞여 있어도 됩니다. 해석할 키-값 쌍 형식은 함수 인자로 지정합니다.

키-값 쌍은 key_value_delimiter 뒤에 값이 오는 형태로 구성됩니다. 따옴표로 감싼 키와 값도 지원합니다. 키-값 쌍들은 쌍 구분자(pair delimiter)로 구분되어야 합니다.

구문

extractKeyValuePairs(data, [key_value_delimiter], [pair_delimiter], [quoting_character], [unexpected_quoting_character_strategy])

인자

  • data — 키-값 쌍을 추출할 문자열. String 또는 FixedString.
  • key_value_delimiter — 키와 값 사이의 구분자로 사용할 문자. 기본값 :. String 또는 FixedString.
  • pair_delimiters — 쌍 사이의 구분자로 사용할 문자 집합. 기본값 \space, ,, ;. String 또는 FixedString.
  • quoting_character — 따옴표 문자로 사용할 문자. 기본값 ". String 또는 FixedString.
  • unexpected_quoting_character_strategyread_keyread_value 단계 동안 예상치 못한 위치의 따옴표 문자를 처리하는 전략. 가능한 값: invalid, accept, promote. invalid는 키/값을 버리고 WAITING_KEY 상태로 돌아갑니다. accept는 일반 문자로 취급합니다. promoteREAD_QUOTED_{KEY/VALUE} 상태로 전환하고 다음 문자부터 시작합니다. 기본값은 PROMOTE.

반환 값

  • 추출된 키-값 쌍을 Map(String, String)으로 반환.

예제

Query:

간단한 경우

SELECT extractKeyValuePairs('name:neymar, age:31 team:psg,nationality:brazil') as kv
┌─kv──────────────────────────────────────────────────────────────────────┐
│ {'name':'neymar','age':'31','team':'psg','nationality':'brazil'}        │
└─────────────────────────────────────────────────────────────────────────┘

따옴표 문자로 작은따옴표 사용

SELECT extractKeyValuePairs('name:\'neymar\';\'age\':31;team:psg;nationality:brazil,last_key:last_value', ':', ';,', '\'') as kv
┌─kv───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ {'name':'neymar','age':'31','team':'psg','nationality':'brazil','last_key':'last_value'}                                 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

unexpected_quoting_character_strategy 예제:

unexpected_quoting_character_strategy=invalid

SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'INVALID') as kv;
┌─kv────────────────┐
│ {'abc':'5'}       │
└───────────────────┘
SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'INVALID') as kv;
┌─kv──┐
│ {}  │
└─────┘

unexpected_quoting_character_strategy=accept

SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'ACCEPT') as kv;
┌─kv────────────────┐
│ {'name"abc':'5'}  │
└───────────────────┘
SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'ACCEPT') as kv;
┌─kv─────────────────┐
│ {'name"abc"':'5'}  │
└────────────────────┘

unexpected_quoting_character_strategy=promote

SELECT extractKeyValuePairs('name"abc:5', ':', ' ,;', '\"', 'PROMOTE') as kv;
┌─kv──┐
│ {}  │
└─────┘
SELECT extractKeyValuePairs('name"abc":5', ':', ' ,;', '\"', 'PROMOTE') as kv;
┌─kv───────────┐
│ {'abc':'5'}  │
└──────────────┘

이스케이프 시퀀스 미지원 시의 이스케이프 시퀀스

SELECT extractKeyValuePairs('age:a\\x0A\\n\\0') AS kv
┌─kv─────────────────────┐
│ {'age':'a\\x0A\\n\\0'} │
└────────────────────────┘

별칭: str_to_map, mapFromString

인자

  • 없음.

반환 값

extractKeyValuePairsWithEscaping

도입 버전: v23.4.0

아무 문자열에서든 키-값 쌍을 추출하며, 문자열 내 이스케이프 시퀀스를 처리합니다. 문자열이 완전히 키-값 쌍 형식일 필요는 없습니다. extractKeyValuePairs와 비슷하지만 따옴표 안의 이스케이프된 문자를 올바르게 해석합니다.

구문

extractKeyValuePairsWithEscaping(data, [key_value_delimiter], [pair_delimiter], [quoting_character])

인자

  • data — 키-값 쌍을 추출할 문자열. String 또는 FixedString.
  • key_value_delimiter — 키와 값 사이의 구분자. 기본값 :. String.
  • pair_delimiters — 쌍 사이의 구분자 집합. 기본값 \space, ,, ;. String.
  • quoting_character — 따옴표 문자. 기본값 ". String.

반환 값

  • 추출된 키-값 쌍을 Map(String, String)으로 반환.

예제

SELECT extractKeyValuePairsWithEscaping('name:neymar'}  -- MISMATCH

map

도입 버전: v20.5.0

key:value 쌍으로부터 Map을 구성합니다.

구문

map(key1, value1[, key2, value2, ...])

인자

  • key — 맵의 키. Map 키 유형이 될 수 있는 모든 유형.
  • value — 맵의 값. Map 값 유형이 될 수 있는 모든 유형.

반환 값

key:value 쌍으로 구성된 맵. Map

예제

Query

SELECT map('key1', number, 'key2', number * 2) FROM numbers(3);

Response

┌─map('key1', number, 'key2', number * 2)─┐
│ {'key1':0,'key2':0}                     │
│ {'key1':1,'key2':2}                     │
│ {'key1':2,'key2':4}                     │
└─────────────────────────────────────────┘

mapAdd

도입 버전: v23.1.0

같은 키의 값을 합산해 맵들을 결합합니다.

구문

mapAdd(arg1, arg2, ...)

인자

  • arg — 맵(들) 또는 튜플(들).

반환 값

같은 키가 합산된 맵을 반환합니다.

예제

Query

SELECT mapAdd(map('k', 1), map('k', 2)) AS res;

Response

┌─res──────────┐
│ {'k':3}      │
└──────────────┘

mapAll

도입 버전: v23.6.0

맵의 각 요소에 대해 전달된 함수를 호출하고, 함수가 모든 요소에 대해 참을 반환하면 true를 반환합니다.

구문

mapAll(func, map)

인자

반환 값

함수가 모든 요소에 대해 참을 반환하면 true, 아니면 false.

예제

Query

SELECT mapAll((k, v) -> v > 1, map('a', 2, 'b', 3));

Response

1

mapApply

도입 버전: v23.6.0

맵의 각 요소에 전달된 함수를 적용해 변환된 맵을 반환합니다.

구문

mapApply(func, map)

인자

반환 값

변환된 맵. Map

예제

Query

SELECT mapApply((k, v) -> (k, v * 2), map('a', 2, 'b', 3));

Response

{'a':4,'b':6}

mapConcat

도입 버전: v20.5.0

여러 맵을 결합합니다.

구문

mapConcat(maps...)

인자

  • maps... — 결합할 맵들. Map.

반환 값

모든 맵의 요소를 담은 맵을 반환합니다. Map

예제

Query

SELECT mapConcat(map('a', 1), map('b', 2));

Response

{'a':1,'b':2}

mapContainsKey

도입 버전: v20.5.0

맵에 지정된 키가 들어 있는지 확인합니다.

구문

mapContainsKey(map, key)

인자

  • map — 맵. Map.
  • key — 키. 맵 키 유형과 일치해야 합니다.

반환 값

맵에 키가 있으면 1, 없으면 0. UInt8

예제

Query

SELECT mapContainsKey(map('a', 1), 'a');

Response

1

mapContainsKeyLike

도입 버전: v23.8.0

맵에 지정된 키 패턴과 일치하는 키가 있는지 확인합니다.

구문

mapContainsKeyLike(map, pattern)

인자

  • map — 맵. Map.
  • pattern — 일치시킬 문자열 패턴.

반환 값

일치하는 키가 있으면 1, 없으면 0. UInt8

예제

Query

SELECT mapContainsKeyLike(map('key1', 1, 'key2', 2), 'key%');

Response

1

mapContainsValue

도입 버전: v20.5.0

맵에 지정된 값이 들어 있는지 확인합니다.

구문

mapContainsValue(map, value)

인자

  • map — 맵. Map.
  • value — 값. 맵 값 유형과 일치해야 합니다.

반환 값

맵에 값이 있으면 1, 없으면 0. UInt8

예제

Query

SELECT mapContainsValue(map('a', 1), 1);

Response

1

mapContainsValueLike

도입 버전: v23.8.0

맵에 지정된 값 패턴과 일치하는 값이 있는지 확인합니다.

구문

mapContainsValueLike(map, pattern)

인자

  • map — 맵. Map.
  • pattern — 일치시킬 문자열 패턴.

반환 값

일치하는 값이 있으면 1, 없으면 0. UInt8

mapExists

도입 버전: v23.6.0

맵의 각 요소에 대해 전달된 함수를 호출하고, 함수가 적어도 하나의 요소에 대해 참을 반환하면 true를 반환합니다.

구문

mapExists(func, map)

인자

반환 값

함수가 적어도 하나의 요소에 대해 참을 반환하면 true, 아니면 false.

mapExtractKeyLike

도입 버전: v23.8.0

맵에서 지정된 키 패턴과 일치하는 키를 가진 항목을 추출합니다.

구문

mapExtractKeyLike(map, pattern)

인자

  • map — 맵. Map.
  • pattern — 일치시킬 문자열 패턴.

반환 값

일치하는 키를 가진 항목만 담은 맵. Map

mapExtractValueLike

도입 버전: v23.8.0

맵에서 지정된 값 패턴과 일치하는 값을 가진 항목을 추출합니다.

구문

mapExtractValueLike(map, pattern)

인자

  • map — 맵. Map.
  • pattern — 일치시킬 문자열 패턴.

반환 값

일치하는 값을 가진 항목만 담은 맵. Map

mapFilter

도입 버전: v23.6.0

맵의 각 요소에 대해 전달된 함수를 호출하고, 함수가 참을 반환하는 요소만 담은 맵을 반환합니다.

구문

mapFilter(func, map)

인자

반환 값

함수가 참을 반환하는 요소만 담은 맵. Map

mapFromArrays

도입 버전: v23.2.0

키 배열과 값 배열에서 맵을 구성합니다.

구문

mapFromArrays(keys, values)

인자

  • keys — 맵 키 배열. Array.
  • values — 맵 값 배열. Array.

반환 값

keys 배열의 키와 values 배열의 값으로 구성된 맵. Map

mapKeys

도입 버전: v20.5.0

맵의 모든 키를 반환합니다.

구문

mapKeys(map)

인자

  • map — 맵. Map.

반환 값

맵의 모든 키를 담은 배열. Array

예제

Query

SELECT mapKeys(map('a', 1, 'b', 2));

Response

['a','b']

mapPartialReverseSort

도입 버전: v23.8.0

N개의 최대 요소를 내림차순으로 정렬해서 반환하고, 나머지는 원래 순서대로 유지합니다.

구문

mapPartialReverseSort(map, limit)

인자

  • map — 맵. Map.
  • limit — 정렬할 요소 수.

반환 값

내림차순으로 정렬된 부분 맵. Map

mapPartialSort

도입 버전: v23.8.0

N개의 최소 요소를 오름차순으로 정렬해서 반환하고, 나머지는 원래 순서대로 유지합니다.

구문

mapPartialSort(map, limit)

인자

  • map — 맵. Map.
  • limit — 정렬할 요소 수.

반환 값

오름차순으로 정렬된 부분 맵. Map

mapPopulateSeries

도입 버전: v22.6.0

누락된 키에 기본값을 채워 키가 고정 간격으로 연속되게 합니다.

구문

mapPopulateSeries(map[, default])

인자

  • map — 맵. Map.
  • default — 누락된 키에 채울 기본값. 선택 사항.

반환 값

연속된 키를 가진 맵. Map

mapReverseSort

도입 버전: v23.8.0

맵을 키 기준 내림차순으로 정렬합니다.

구문

mapReverseSort(map)

인자

  • map — 맵. Map.

반환 값

키 기준 내림차순으로 정렬된 맵. Map

mapSort

도입 버전: v23.8.0

맵을 키 기준 오름차순으로 정렬합니다.

구문

mapSort(map)

인자

  • map — 맵. Map.

반환 값

키 기준 오름차순으로 정렬된 맵. Map

mapSubtract

도입 버전: v23.1.0

같은 키의 값을 뺍니다. 값이 0보다 작아지면 결과에서 제거합니다.

구문

mapSubtract(keys, values)

인자

  • keys/values — 두 개의 맵 또는 튜플.

반환 값

같은 키가 뺄셈된 맵을 반환합니다.

예제

Query

SELECT mapSubtract(map('k', 3), map('k', 1)) AS res;

Response

┌─res───────┐
│ {'k':2}   │
└───────────┘

mapUpdate

도입 버전: v23.1.0

맵을 결합하되, 두 맵에 같은 키가 있으면 두 번째 맵의 값이 우선합니다.

구문

mapUpdate(map1, map2)

인자

  • map1 — 첫 번째 맵. Map.
  • map2 — 두 번째 맵. Map.

반환 값

결합된 맵. 같은 키의 값은 map2의 값이 승리합니다. Map

mapValues

도입 버전: v20.5.0

맵의 모든 값을 반환합니다.

구문

mapValues(map)

인자

  • map — 맵. Map.

반환 값

맵의 모든 값을 담은 배열. Array

예제

Query

SELECT mapValues(map('a', 1, 'b', 2));

Response

[1,2]

더 알아보기 (Learn more)