JSONPATHDOUBLE
JSONPATHDOUBLE
JSONPATHDOUBLE 함수는 jsonField에서 'jsonPath'를 기반으로 Double 값을 추출하고, null 또는 파싱 오류 시 선택적 defaultValue를 사용하는 함수예요. 이 함수는 수집 변환 함수에서만 사용할 수 있어요.
출처: 문서
본문
jsonField에서 'jsonPath'를 기반으로 Double 값을 추출하고, null 또는 파싱 오류 시 선택적 defaultValue를 사용해요. 이 함수는 수집 변환 함수에서만 사용할 수 있어요.
시그니처 (Signature)
JSONPATHDOUBLE(jsonField, 'jsonPath', [defaultValue])
| Arguments | Description |
|---|---|
jsonField |
JSON 문서를 포함하는 Identifier/Expression |
'jsonPath' |
JSON 문서에서 값을 읽기 위해 JsonPath 문법을 따름 |
'jsonPath'`은 리터럴이에요. Pinot은 이를 식별자와 구분하기 위해 작은따옴표를 사용해요.
데이터를 가져오기 전에 Jayway JsonPath Evaluator Tool을 사용해 JSON 표현식을 테스트할 수 있어요.
사용 예시 (Usage Examples)
다음 JSON 문서에서 필드를 추출하는 데 기반한 예시예요:
{
"data": {
"name": "Pete",
"age": 24,
"subjects": [
{
"name": "maths",
"homework_grades": [80, 85, 90, 95, 100],
"grade": "A",
"score": 90
},
{
"name": "english",
"homework_grades": [60, 65, 70, 85, 90],
"grade": "B",
"score": 70
}
]
}
}
| Expression | Value |
|---|---|
JSONPATHDOUBLE(data, '$.age') |
24.0 |
이 함수는 아래와 같이 테이블 설정에서 age 속성을 age 컬럼으로 추출하는 데 사용할 수 있어요:
{
"tableConfig":{
"ingestionConfig":{
"transformConfigs":[
{
"columnName":"age",
"transformFunction":"JSONPATHDOUBLE(data, '$.age')"
}
]
}
}
}
값 변환 (Value conversion)
JSONPATHDOUBLE은 일치하는 값을 다음과 같이 double로 변환해요:
| Matched value | Result |
|---|---|
| Number | 값의 double 표현 |
| Boolean | true는 1.0, false는 0.0 |
구체화된 입력의 TIMESTAMP |
에포크 밀리초 |
구체화된 입력의 DATE |
Unix 에포크 이후 일수 |
구체화된 입력의 TIME |
자정 이후 밀리초 |
TIMESTAMP, DATE, TIME 변환은 추출기가 입력을 JSON 텍스트 대신 레코드 객체로 이미 구체화했을 때 적용돼요. TIME 값은 서브 밀리초 정밀도를 버려요. 누락되거나 null인 값, 비숫자 값, 변환 오류는 defaultValue가 제공되면 그 값을 반환해요.
빠른 변형과 첫 번째 일치 변형 (Fast and first-match variants)
JSONPATHDOUBLEFORY (실험적)
JSONPATHDOUBLEFORY(jsonField, 'jsonPath', [defaultValue])
JSONPATHDOUBLEFORY는 적격한 단순 스칼라 경로를 Apache Fory로 평가하고, 지원되지 않는 입력이나 Fory를 사용할 수 없을 때 JSONPATHDOUBLE으로 폴백해요. 표준 Pinot 배포에는 Fory가 포함되지 않아요. 가속 경로는 수집 애플리케이션의 클래스패스에 org.apache.fory:fory-json:1.6.0과 fory-core가 필요해요. 이 실험적 함수는 변경되거나 제거될 수 있어요.
경로가 단순 선형 경로일 때 아래의 옵트인 변형을 사용하세요: $ 뒤에 .name, ['literal.key'], [0] 세그먼트만 이어지는 경우. 와일드카드, 딥 스캔(..), 필터, 유니온, 슬라이스, 음수 인덱스, 또는 단독 $ 같은 더 복잡한 JsonPath 기능에서는 Pinot이 기존 JSONPATHDOUBLE 동작으로 폴백해요.
JSONPATHDOUBLE처럼 두 변형 모두 수집 변환 함수를 위한 것이에요.
JSONPATHDOUBLEFAST
JSONPATHDOUBLEFAST(jsonField, 'jsonPath', [defaultValue])
JSONPATHDOUBLEFAST는 먼저 전체 Jayway DOM을 구축하는 대신 JSON 텍스트를 한 번의 전방 패스로 해석해 지원되는 경로를 해결해요. defaultValue 처리를 포함해 JSONPATHDOUBLE과 같은 결과를 유지하며, 경로가 단순 선형 경로가 아니거나 입력이 JSON 객체/배열이 아닐 때 기존 구현으로 폴백해요.
의미를 바꾸지 않으면서 수집 CPU 비용을 낮추려면 JSONPATHDOUBLEFAST를 사용하세요.
JSONPATHDOUBLEFIRSTMATCH
JSONPATHDOUBLEFIRSTMATCH(jsonField, 'jsonPath', [defaultValue])
JSONPATHDOUBLEFIRSTMATCH는 같은 스트리밍 고속 경로를 사용하지만 주소가 지정된 필드를 찾는 즉시 중지해요. 필드가 JSON 문서에서 일찍 나타날 때 보통 가장 빠른 옵션이지만, 정의되지 않거나 손상된 입력에 대해서는 동작을 변경해요:
- 중복 키는 마지막이 아닌 첫 번째 발생으로 해석돼요.
- 주소가 지정된 필드 이후에 엄격히 잘못된 문서라도 추출된 값을 반환할 수 있어요.
업스트림 JSON이 잘 구성되고 중복이 없는 경우에만 JSONPATHDOUBLEFIRSTMATCH를 사용하세요.