JSONPATHLONG

JSONPATHLONG

JSONPATHLONG 함수는 jsonField에서 'jsonPath'를 기반으로 Long 값을 추출하고, null 또는 파싱 오류 시 선택적 defaultValue를 사용하는 함수예요. 이 함수는 수집 변환 함수에서만 사용할 수 있어요.

출처: 문서

본문

jsonField에서 'jsonPath'를 기반으로 Long 값을 추출하고, null 또는 파싱 오류 시 선택적 defaultValue를 사용해요. 이 함수는 수집 변환 함수에서만 사용할 수 있어요.

시그니처 (Signature)

JSONPATHLONG(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
JSONPATHLONG(data, '$.age') 24

이 함수는 아래와 같이 테이블 설정에서 age 속성을 age 컬럼으로 추출하는 데 사용할 수 있어요:

{
   "tableConfig":{
      "ingestionConfig":{
         "transformConfigs":[
            {
               "columnName":"age",
               "transformFunction":"JSONPATHLONG(data, '$.age')"
            }
         ]
      }
   }
}

값 변환 (Value conversion)

JSONPATHLONG은 일치하는 값을 다음과 같이 long으로 변환해요:

Matched value Result
Number 값의 long 표현
Boolean true는 1, false는 0
구체화된 입력의 TIMESTAMP 에포크 밀리초
구체화된 입력의 DATE Unix 에포크 이후 일수
구체화된 입력의 TIME 자정 이후 밀리초

TIMESTAMP, DATE, TIME 변환은 추출기가 입력을 JSON 텍스트 대신 레코드 객체로 이미 구체화했을 때 적용돼요. 누락되거나 null인 값, 비숫자 값, 변환 오류는 defaultValue가 제공되면 그 값을 반환해요.

빠른 변형과 첫 번째 일치 변형 (Fast and first-match variants)

JSONPATHLONGFORY (실험적)

JSONPATHLONGFORY(jsonField, 'jsonPath', [defaultValue])

JSONPATHLONGFORY는 적격한 단순 스칼라 경로를 Apache Fory로 평가하고, 지원되지 않는 입력이나 Fory를 사용할 수 없을 때 JSONPATHLONG으로 폴백해요. 표준 Pinot 배포에는 Fory가 포함되지 않아요. 가속 경로는 수집 애플리케이션의 클래스패스에 org.apache.fory:fory-json:1.6.0과 fory-core가 필요해요. 이 실험적 함수는 변경되거나 제거될 수 있어요.

경로가 단순 선형 경로일 때 아래의 옵트인 변형을 사용하세요: $ 뒤에 .name, ['literal.key'], [0] 세그먼트만 이어지는 경우. 와일드카드, 딥 스캔(..), 필터, 유니온, 슬라이스, 음수 인덱스, 또는 단독 $ 같은 더 복잡한 JsonPath 기능에서는 Pinot이 기존 JSONPATHLONG 동작으로 폴백해요.

JSONPATHLONG처럼 두 변형 모두 수집 변환 함수를 위한 것이에요.

JSONPATHLONGFAST

JSONPATHLONGFAST(jsonField, 'jsonPath', [defaultValue])

JSONPATHLONGFAST는 먼저 전체 Jayway DOM을 구축하는 대신 JSON 텍스트를 한 번의 전방 패스로 해석해 지원되는 경로를 해결해요. defaultValue 처리를 포함해 JSONPATHLONG과 같은 결과를 유지하며, 경로가 단순 선형 경로가 아니거나 입력이 JSON 객체/배열이 아닐 때 기존 구현으로 폴백해요.

의미를 바꾸지 않으면서 수집 CPU 비용을 낮추려면 JSONPATHLONGFAST를 사용하세요.

JSONPATHLONGFIRSTMATCH

JSONPATHLONGFIRSTMATCH(jsonField, 'jsonPath', [defaultValue])

JSONPATHLONGFIRSTMATCH는 같은 스트리밍 고속 경로를 사용하지만 주소가 지정된 필드를 찾는 즉시 중지해요. 필드가 JSON 문서에서 일찍 나타날 때 보통 가장 빠른 옵션이지만, 정의되지 않거나 손상된 입력에 대해서는 동작을 변경해요:

  • 중복 키는 마지막이 아닌 첫 번째 발생으로 해석돼요.
  • 주소가 지정된 필드 이후에 엄격히 잘못된 문서라도 추출된 값을 반환할 수 있어요.

업스트림 JSON이 잘 구성되고 중복이 없는 경우에만 JSONPATHLONGFIRSTMATCH를 사용하세요.

더 알아보기 (Learn more)