KSQL에서 stream을 생성하다가 아래와 같은 오류를 만났다.
line 3:3: extraneous input 'properties' expecting
{'INTEGER', 'DATE', 'TIME', 'TIMESTAMP', 'INTERVAL',
'YEAR', 'MONTH', 'DAY', 'HOUR', 'MINUTE', 'SECOND',
'ZONE', 'PARTITION', 'STRUCT', 'EXPLAIN', 'ANALYZE',
'TYPE', 'SHOW', 'TABLES', 'COLUMNS', 'COLUMN', 'PARTITIONS',
'FUNCTIONS', 'FUNCTION', 'ARRAY', 'MAP', 'SET', 'RESET', 'SESSION',
'IF', IDENTIFIER, DIGIT_IDENTIFIER, QUOTED_IDENTIFIER, BACKQUOTED_IDENTIFIER}
상기와 같은 오류가 난 원인은 아래와 같이 json의 key에 예약어가 있기 때문인데 해당 예약어는 properties이다.
{
"id":1234,
"properties": {
"name":"hong",
"age":13
}
}
상기와 같은 json record를 stream으로 만들기 위해서 아래와 같이 명령어를 쳤을 경우 에러가 발생한다.
CREATE STREAM users_original(
id varchar,
properties STRUCT<
name varchar,
age varchar
>
)
WITH(KAFKA_TOPIC='users', value_format='json');
에러를 해결하기 위해 아래와 같이 `로 감싸서 생성하면된다.
CREATE STREAM users_original(
id varchar,
`PROPERTIES` STRUCT<
name varchar,
location varchar
>
)
WITH(KAFKA_TOPIC='users', value_format='json');
여기서 중요한 것이 properties를 소문자로 하면 select 를 했을때 데이터가 null이 나온다.
반드시 PROPERTIES와 같이 대문자로 적고 `로 감싸야한다.
이 이슈는 현재 KSQL issue에 등록되어 있다.
관련 ksql github issue : https://github.com/confluentinc/ksql/issues/677
KSQL syntax : https://docs.confluent.io/current/ksql/docs/developer-guide/syntax-reference.html
반응형
'빅데이터 > Kafka' 카테고리의 다른 글
아파치 카프카 강의 #2 - 토픽이란? 토픽의 기능 소개 (0) | 2019.10.21 |
---|---|
아파치 카프카 강의 #1 - 소개 및 개요 (4) | 2019.10.21 |
KSQL 소개 ppt (0) | 2019.10.16 |
링크드인에서 사용중인 커스텀 Kafka 공개 (1) | 2019.10.15 |
Airbnb에서 Kafka의 활용 (0) | 2019.10.14 |
Kafka의 KSQL 컨셉, 아키텍쳐, 용어, 커스텀 function 적용하는 방법 (0) | 2019.10.11 |