JSONPATHSTRING
JSONPATHSTRING
JSONPATHSTRING 함수는 jsonField에서 'jsonPath'를 기반으로 String 값을 추출하고, null 또는 파싱 오류 시 선택적 defaultValue를 사용하는 함수예요. 이 함수는 수집 변환 함수에서만 사용할 수 있어요.
출처: 문서
본문
jsonField에서 'jsonPath'를 기반으로 String 값을 추출하고, null 또는 파싱 오류 시 선택적 defaultValue를 사용해요. 이 함수는 수집 변환 함수에서만 사용할 수 있어요.
시그니처 (Signature)
JSONPATHSTRING(jsonField, 'jsonPath', [defaultValue])
| Arguments | Description |
|---|---|
jsonField |
JSON 문서를 포함하는 Identifier/Expression |
'jsonPath' |
JSON 문서에서 값을 읽기 위해 JsonPath 문법을 따름 |
'jsonPath'`은 리터럴이에요. Pinot은 이를 식별자와 구분하기 위해 작은따옴표를 사용해요.
데이터를 가져오기 전에 JSONPath Online Evaluator를 사용해 JSON 표현식을 테스트할 수 있어요.
사용 예시 (Usage Examples)
다음 JSON 문서에서 필드를 추출하는 데 기반한 예시예요:
{
"data": {
"name": {"full.name": "Peter", "nick.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 |
|---|---|
JSONPATHSTRING(data, '$.age') |
"24" |
JSONPATHSTRING(data, '$.name["nick.name"]') |
"Pete" |
이 함수는 아래와 같이 테이블 설정에서 age 속성을 age 컬럼으로, nick.name 속성을 nickName 컬럼으로 추출하는 데 사용할 수 있어요:
{
"tableConfig":{
"ingestionConfig":{
"transformConfigs":[
{
"columnName":"age",
"transformFunction":"JSONPATHSTRING(data, '$.age')"
},
{
"columnName":"nickName",
"transformFunction":"JSONPATHSTRING(data, '$.name[\"nick.name\"]')"
}
]
}
}
}
수집 중 JSONPATHSTRING이 이미 구체화된 객체 트리에서 읽을 때, JSON 텍스트를 다시 파싱하는 대신 추출기의 런타임 타입을 보존해요. UUID, LocalDate, LocalTime 같은 타입화된 리프에 대해 JSONPATHSTRING, JSONPATHSTRINGFAST, JSONPATHSTRINGFIRSTMATCH는 이제 JSON 따옴표 없이 표준 또는 ISO-8601 문자열을 반환해요. 이 호환성 변경은 정상적인 JSON 문자열 입력에는 영향을 주지 않으며, 파서는 여전히 일반 JSON 스칼라 타입을 생성해요.
빠른 변형과 첫 번째 일치 변형 (Fast and first-match variants)
JSONPATHSTRINGFORY (실험적)
JSONPATHSTRINGFORY(jsonField, 'jsonPath', [defaultValue])
JSONPATHSTRINGFORY는 적격한 단순 스칼라 경로를 Apache Fory로 평가하고, 지원되지 않는 입력이나 Fory를 사용할 수 없을 때 JSONPATHSTRING으로 폴백해요. 표준 Pinot 배포에는 Fory가 포함되지 않아요. 가속 경로는 수집 애플리케이션의 클래스패스에 org.apache.fory:fory-json:1.6.0과 fory-core가 필요해요. 이 실험적 함수는 변경되거나 제거될 수 있어요.
경로가 단순 선형 경로일 때 아래의 옵트인 변형을 사용하세요: $ 뒤에 .name, ['literal.key'], [0] 세그먼트만 이어지는 경우. 와일드카드, 딥 스캔(..), 필터, 유니온, 슬라이스, 음수 인덱스, 또는 단독 $ 같은 더 복잡한 JsonPath 기능에서는 Pinot이 기존 JSONPATHSTRING 동작으로 폴백해요.
JSONPATHSTRING처럼 두 변형 모두 수집 변환 함수를 위한 것이에요.
JSONPATHSTRINGFAST
JSONPATHSTRINGFAST(jsonField, 'jsonPath', [defaultValue])
JSONPATHSTRINGFAST는 먼저 전체 Jayway DOM을 구축하는 대신 JSON 텍스트를 한 번의 전방 패스로 해석해 지원되는 경로를 해결해요. defaultValue 처리와 이미 구체화된 객체 트리에서 UUID, LocalDate, LocalTime 리프에 대한 동일한 따옴표 없는 렌더링을 포함해 JSONPATHSTRING과 같은 결과를 유지하며, 경로가 단순 선형 경로가 아니거나 입력이 JSON 객체/배열이 아닐 때 기존 구현으로 폴백해요.
의미를 바꾸지 않으면서 수집 CPU 비용을 낮추려면 JSONPATHSTRINGFAST를 사용하세요.
JSONPATHSTRINGFIRSTMATCH
JSONPATHSTRINGFIRSTMATCH(jsonField, 'jsonPath', [defaultValue])
JSONPATHSTRINGFIRSTMATCH는 같은 스트리밍 고속 경로를 사용하지만 주소가 지정된 필드를 찾는 즉시 중지해요. 필드가 JSON 문서에서 일찍 나타날 때 보통 가장 빠른 옵션이지만, 정의되지 않거나 손상된 입력에 대해서는 동작을 변경해요:
- 중복 키는 마지막이 아닌 첫 번째 발생으로 해석돼요.
- 주소가 지정된 필드 이후에 엄격히 잘못된 문서라도 추출된 값을 반환할 수 있어요.
업스트림 JSON이 잘 구성되고 중복이 없는 경우에만 JSONPATHSTRINGFIRSTMATCH를 사용하세요.