CLPDECODE

CLPDECODE

CLPDECODE 함수는 CLP 인코딩된 필드의 값을 구성 요소 컬럼들로부터 복원(디코딩)하는 함수예요.

출처: 문서

본문

CLPLogMessageDecoder는 필드를 세 개의 컬럼 집합으로 인코딩할 수 있어요:

  • <field>_logtype
  • <field>_dictionaryVars
  • <field>_encodedVars

여기서 <field>는 인코딩 전 필드 이름이에요. 이러한 컬럼 집합을 컬럼 그룹(column group)이라고 불러요.

시그니처 (Signatures)

CLPDECODE(colGroupName)

CLPDECODE(colGroupName, defaultValue)

CLPDECODE(colGroupName_logtype, colGroupName_dictionaryVars, colGroupName_encodedVars)

CLPDECODE(colGroupName_logtype, colGroupName_dictionaryVars, colGroupName_encodedVars, defaultValue)

  • 문법상 컬럼 그룹의 이름만 지정하거나 컬럼 그룹 안의 모든 컬럼을 지정할 수 있어요.
    • 컬럼 그룹 이름만 지정하는 문법을 사용하려면 아래에 설명된 추가 쿼리 리라이터를 활성화해야 해요.
  • defaultValue는 선택 사항이며, 컬럼 그룹을 어떤 이유(예: null)로 디코딩할 수 없을 때 사용돼요.

사용 예시 (Usage Examples)

"message" 필드에 다음 값이 포함된 레코드를 생각해 봐요:

INFO Task task_12 assigned to container: [ContainerID:container_15], operation took 0.335 seconds. 8 tasks remaining.

CLPLogMessageDecoder는 이 정보를 3개 컬럼으로 인코딩해요:

message_logtype message_dictionaryVars message_encodedVars
INFO Task \x12 assigned to container: [ContainerID:\x12], operation took \x13 seconds. \x11 tasks remaining. ["task_12", "container_15"] [0x190000000000014f, 8]

그러면 CLPDECODE를 다음과 같이 사용할 수 있어요:

SELECT CLPDECODE(message) AS message
FROM myTable
message
INFO Task task_12 assigned to container: [ContainerID:container_15], operation took 0.335 seconds. 8 tasks remaining.

컬럼 그룹 문법 활성화 (Enable the column-group syntax)

컬럼 그룹 이름만 지정하는 CLPDECODE 문법을 사용하려면 Pinot 브로커를 다음과 같이 추가 쿼리 리라이터로 구성해야 해요:

pinot.broker.query.rewriter.class.names=org.apache.pinot.sql.parsers.rewriter.CompileTimeFunctionsInvoker,org.apache.pinot.sql.parsers.rewriter.SelectionsRewriter,org.apache.pinot.sql.parsers.rewriter.PredicateComparisonRewriter,org.apache.pinot.sql.parsers.rewriter.ClpRewriter,org.apache.pinot.sql.parsers.rewriter.AliasApplier,org.apache.pinot.sql.parsers.rewriter.OrdinalsUpdater,org.apache.pinot.sql.parsers.rewriter.NonAggregationGroupByToDistinctQueryRewriter

이렇게 하면 기본 쿼리 리라이터 집합에 ClpRewriter가 추가돼요. ClpRewriter가 AliasApplier보다 앞에 배치되어 CLP 인코딩 필드의 별칭 지정은 CLPDECODE 재작성 이후에만 발생한다는 점에 주의하세요.

더 알아보기 (Learn more)