Как мне установить ключевое поле при создании таблицы в KSQL?

#apache-kafka #ksqldb

#apache-kafka #ksqldb

Вопрос:

Я хотел бы спросить, могу ли я установить ключевое поле при создании таблицы?

Я создал таблицу путем агрегирования, как показано ниже:

 CREATE TABLE withdrawal_less_than_5min AS 
SELECT executedate, status, count(*) as count 
FROM TB3_WITHDRAW_RECORD_EXCLUDE_INTERNAL_USERS 
GROUP BY executedate,status;
  

И когда я DESCRIBE EXTENDED withdrawal_less_than_5min задаю ключевое поле таблицы, как показано ниже, которое, я полагаю, должно быть executedate и status.

Key field : KSQL_INTERNAL_COL_0| |KSQL_INTERNAL_COL_1

Однако, когда я пытаюсь объединить его с другой таблицей с той же агрегацией, она возвращает эту ошибку.

 Source table (A) key column (KSQL_INTERNAL_COL_0| |KSQL_INTERNAL_COL_1) 
is not the column used in the join criteria (EXECUTEDATE).
  

Как мне установить ключевое поле? Спасибо.

Ответ №1:

Вы можете создать ключ следующим образом —

 CREATE TABLE withdrawal_less_than_5min with (key='EXECUTEDATE') AS 
SELECT executedate, status, count(*) as count 
FROM TB3_WITHDRAW_RECORD_EXCLUDE_INTERNAL_USERS 
GROUP BY executedate,status partition by 'EXECUTEDATE';
  

Вы также можете следить за блогом Робина — https://www.confluent.io/stream-processing-cookbook/ksql-recipes/inspecting-changing-topic-keys.

По любым ошибкам или вопросам, связанным с Ksql, ищите Робина Моффета, он уже ответил на наши запросы, чтобы помочь 🙂

Комментарии:

1. Возвращается сообщение об ошибке mismatched input 'partition' expecting ';'

2. Я нахожусь в той же лодке, что и OP, и CREATE TABLE не нравится предложение PARTITION BY.