맵 함수
맵 함수 (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_strategy—read_key및read_value단계 동안 예상치 못한 위치의 따옴표 문자를 처리하는 전략. 가능한 값:invalid,accept,promote.invalid는 키/값을 버리고WAITING_KEY상태로 돌아갑니다.accept는 일반 문자로 취급합니다.promote는READ_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: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)
인자
func— 맵 요소(key, value)에 대해 실행되는 함수.Function(Tuple(key, value)) -> Boolean.map— 맵.Map.
반환 값
함수가 모든 요소에 대해 참을 반환하면 true, 아니면 false.
예제
Query
SELECT mapAll((k, v) -> v > 1, map('a', 2, 'b', 3));
Response
1
mapApply
도입 버전: v23.6.0
맵의 각 요소에 전달된 함수를 적용해 변환된 맵을 반환합니다.
구문
mapApply(func, map)
인자
func— 맵 요소(key, value)에 대해 실행되는 함수.Function(Tuple(key, value)) -> Tuple(key, value).map— 맵.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)
인자
func— 맵 요소(key, value)에 대해 실행되는 함수.Function(Tuple(key, value)) -> Boolean.map— 맵.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)
인자
func— 맵 요소(key, value)에 대해 실행되는 함수.Function(Tuple(key, value)) -> Boolean.map— 맵.Map.
반환 값
함수가 참을 반환하는 요소만 담은 맵. Map
mapFromArrays
도입 버전: v23.2.0
키 배열과 값 배열에서 맵을 구성합니다.
구문
mapFromArrays(keys, values)
인자
반환 값
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)
인자
반환 값
결합된 맵. 같은 키의 값은 map2의 값이 승리합니다. Map
mapValues
도입 버전: v20.5.0
맵의 모든 값을 반환합니다.
구문
mapValues(map)
인자
map— 맵.Map.
반환 값
맵의 모든 값을 담은 배열. Array
예제
Query
SELECT mapValues(map('a', 1, 'b', 2));
Response
[1,2]