가상 컬럼
가상 컬럼 (Virtual columns)
쿼리 도중 기존 컬럼들의 조합으로 만들어지는 쿼리 가능한 컬럼 "뷰"인 가상 컬럼을 소개해요. expression, nested-field, list filtered(mv-filtered) 세 가지 유형을 다뤄요.
출처: 문서
본문
Apache Druid는 Druid SQL과 native 쿼리 두 가지 쿼리 언어를 지원해요. 이 문서는 native 언어를 설명해요. SQL에서 사용 가능한 함수에 대해서는 SQL 문서를 참고해요.
가상 컬럼은 쿼리 동안 컬럼 집합으로부터 생성되는 쿼리 가능한 컬럼 "뷰"예요.
가상 컬럼은 여러 기본 컬럼에서 끌어올 수 있지만, 항상 단일 컬럼으로 제시돼요.
가상 컬럼은 출력 이름으로 참조되어 dimension으로 사용되거나 filter와 aggregator 의 입력으로 사용될 수 있어요.
각 Apache Druid 쿼리는 파라미터로 가상 컬럼 목록을 받을 수 있어요. 다음 scan 쿼리가 예시로 제공돼요:
{ "queryType": "scan", "dataSource": "page_data", "columns":[], "virtualColumns": [ { "type": "expression", "name": "fooPage", "expression": "concat('foo' + page)", "outputType": "STRING" }, { "type": "expression", "name": "tripleWordCount", "expression": "wordCount * 3", "outputType": "LONG" } ], "intervals": [ "2013-01-01/2019-01-02" ]}
가상 컬럼 유형
Expression 가상 컬럼
Expression 가상 컬럼은 Druid의 네이티브 표현식 시스템을 사용해 하나 이상의 컬럼에서 입력의 쿼리 시간 변환을 정의할 수 있게 해줘요.
expression 가상 컬럼의 문법은 다음과 같아요:
{ "type": "expression", "name": <name of the virtual column>, "expression": <row expression>, "outputType": <output value type of expression>}
| property | description | required? | | type | expression 가상 컬럼임을 나타내려면 "expression" 이어야 해요. | yes | | name | 가상 컬럼의 이름. | yes | | expression | 행을 입력으로 받아 가상 컬럼에 대한 값을 출력하는 표현식. | yes | | outputType | 표현식의 출력이 이 타입으로 강제 변환돼요. LONG, FLOAT, DOUBLE, STRING, ARRAY 타입 또는 COMPLEX 타입이 될 수 있어요. | no, 기본값은 FLOAT |
Nested field 가상 컬럼
nested field 가상 컬럼은 COMPLEX
이 가상 컬럼은 SQL 연산자 JSON_VALUE (processFromRaw 가 false인 경우) 또는 JSON_QUERY (processFromRaw 가 true인 경우)에 사용되며, 경로의 'JSONPath' 또는 'jq' 구문 문자열 표현, 또는 컬럼에서 무엇을 선택할지 결정하기 위한 파싱된 "path parts" 목록을 받아요.
다음 동등한 문법 중 하나로 nested field 가상 컬럼을 정의할 수 있어요. 예시들은 모두 같은 출력 값을 만들어내며, 각 예시는 중첩 값에 접근하는 방식을 지정하는 다른 방법을 보여줘요. 첫 번째는 JSONPath 구문 path , 두 번째는 jq path , 세 번째는 pathParts 를 사용해요.
{ "type": "nested-field", "columnName": "shipTo", "outputName": "v0", "expectedType": "STRING", "path": "$.phoneNumbers[1].number" }
{ "type": "nested-field", "columnName": "shipTo", "outputName": "v1", "expectedType": "STRING", "path": ".phoneNumbers[1].number", "useJqSyntax": true }
{ "type": "nested-field", "columnName": "shipTo", "outputName": "v2", "expectedType": "STRING", "pathParts": [ { "type": "field", "field": "phoneNumbers" }, { "type": "arrayElement", "index": 1 }, { "type": "field", "field": "number" } ] }
| property | description | required? |
| type | nested field 가상 컬럼임을 나타내려면 "nested-field" 이어야 해요. | yes |
| columnName | COMPLEX
Nested path part
pathParts 를 탐색할 경로의 각 컴포넌트를 설명하는 객체 배열로 지정해요. 각 객체는 다음 속성을 가질 수 있어요:
| property | description | required? | | type | 'field' 또는 'arrayElement' 여야 해요. 중첩 구조에서 특정 필드에 접근할 때는 field 를, 배열의 특정 정수 위치(0 기반)에 접근할 때는 arrayElement 를 사용해요. | yes | | field | 'field' 타입 path part에서 'field'의 이름. | type 이 'field'인 경우 필수 | | index | type 이 arrayElement 인 경우 배열 요소 인덱스. | type 이 'arrayElement'인 경우 필수 |
중첩 데이터 수집과 저장에 대한 자세한 내용은 Nested columns 문서를 참고해요.
List filtered 가상 컬럼
이 가상 컬럼은 'list filtered' dimension spec을 가상 컬럼으로 사용하는 대안적인 방법을 제공해요. 기본 컬럼 값 인덱스에 최적화된 접근을 제공하며, 어떤 경우엔 약간의 성능 향상을 줄 수 있어요.
{ "type": "mv-filtered", "name": "filteredDim3", "delegate": "dim3", "values": ["hello", "world"], "isAllowList": true }
| property | description | required? | | type | list filtered 가상 컬럼임을 나타내려면 "mv-filtered" 이어야 해요. | yes | | name | 가상 컬럼의 출력 이름. | yes | | delegate | 필터링할 multi-value STRING 입력 컬럼의 이름. | yes | | values | 허용 또는 거부할 STRING 값 집합. | yes | | isAllowList | true 면 가상 컬럼의 출력이 values 로 지정된 집합으로 제한되고, false 면 지정된 값들을 제외한 모든 값을 제공해요. | No, 기본값 true |
더 알아보기 (Learn more)
- SQL 함수 — SQL에서 가상 컬럼 역할
- Nested columns — 중첩 데이터 수집·저장
- Filters — 가상 컬럼을 필터에 활용