Apache Kafka ‐ KSQLDB 활용 - thought-corner/Backend-PlayGround GitHub Wiki
KSQL 주요 제약 사항 정리
- KSQL은 RDBMS SQL과 유사하다. 하지만 기능적으로 여러 제약이 존재한다.
- 또한 다양한 함수 지원 등에서 열세이다.
- KSQLDB는 Offset 기반의 데이터 처리를 기반으로 한다. 데이터는 시간이 지나면서 계속 추가되며, Update/Delete는 발생하지 않는 구조이다.
- KSQL은
subquery를 지원하지 않는다. - KSQL은
inline view를 지원하지 않고 대신materialized view를 지원한다. - KSQL은
order by를 지원하지 않는다. - KSQL은
union/union all을 지원하지 않는다. - KSQL은
windows절을 가지고 있으며,windows절에 기술된 기간만큼만 데이터를 액세스할 수 있다. - KSQL의
windows절은 RDBMS SQL의 window function과 다르게 from절에stream/tables접근 기간을 정하는데 사용된다. - KSQL은
join대상stream/table들이 서로 같은 파티션 갯수, 파티션 키로 구성되어야 한다.
Date, Time, Timestamp 타입 컬럼의 변환 함수
DATE: 시분초를 제외한 월일년만 가지는Temporal타입 → 2023년 2월 1일TIME: 월일년을 제외한 시분초만 가지는Temporal타입 → 11시 59분 59초TIMESTAMP: 월일년 시분초, 밀리세컨드까지 가지는Temporal타입 → 2023년 2월 1일 11시 59분 59초 (10ms)
✅ Date, Time, Timestamp ⭤ 문자열 변환 함수
| Temporal to String 변환 | String to Temporal 변환 | |
|---|---|---|
DATE |
FORMAT_DATE(Date, 'yyyy-MM-dd) |
PARSE_DATE('2023-02-01', 'yyyy-MM-dd') |
TIME |
FORMAT_TIME(Time, 'HH:mm:ss) |
PARSE_TIME('11:59:59', 'HH:mm:ss') |
TIMESTAMP |
FORMAT_TIMESTAMP(Timestamp, 'yyyy-MM-dd HH:mm:ss) |
PARSE_TIMESTAMP('2023-02-11 11:59:59', 'yyyy-MM-dd HH:mm:ss') |
✅ Date, Timestatmp ⭤ Unix epoch 일자/Millisecond값 변환
| Date/Timestamp값을 int/bigint형 Unix epoch일자/Millisecond값 변환 | int/bigint형 Unix epoch일자/Millisecond값을 Date/Time값으로 변환 | |
|---|---|---|
DATE |
UNIX_DATE(Date) |
FROM_DAYS(Unix Epoch 일자) |
TIMESTAMP |
UNIX_TIMESTAMP(Timestamp) |
FROM_UNIXTIME(Unix Epoch Millisecond) |
✅ Date, Time, Timestamp 더하기/빼기 연산
| 더하기 | 빼기 | |
|---|---|---|
DATE |
DATEADD(Days, 7, Date) |
DATESUB(Days, 7, Date) |
TIME |
TIMEADD(Hours, 7, Time) |
TIMESUB(Hours, 7, Time) |
TIMESTAMP |
TIMESTAMPADD(Minutes, 10, Timestamp) |
TIMESTAMPSUB(Minutes, 10, Timestamp) |
Kafka의 Default Timzone
- Kafka Producer가 전송하는 메시지는 Header에 메시지 전송 시각을 UTC 시각으로 가지고 있다.
- 전송된 메시지는 Kafka Broker의
log.message.timestamp.type의 설정값에 따라 Producer 전송 시각을 저장할 수도, Broker에서 Topic에 기록한 시간을 저장할 수도 있다.