如何在ksqldb.io中创建表而不引起语法错误?

问题描述

当前ksql的状态使得很难理解哪个版本支持/拒绝/强制/可选的功能。没有明确的版本引用的Confluent文档并不能使它更好,所以我被困在这里

create table gtest (ID varchar PRIMARY KEY) with (kafka_topic = 'g',value_format='avro');

创建语法错误

line 1:32: mismatched input 'PRIMARY' expecting {',',')'}
Statement: create table gtest (ID varchar PRIMARY KEY) with (kafka_topic = 'g',value_format='avro');
Caused by: line 1:32: mismatched input 'PRIMARY' expecting {',')'}
Caused by: org.antlr.v4.runtime.InputMismatchException

可用主题创建,使用模式创建,可以从oracle数据库导入数据,可以创建流,一切都很好。但是,与我找到的所有文档相反,不会创建该表。我在这里想念什么?

我正在使用Confluent 5.5.1,它是从tarball构建的,而ksql 0.11.0是从confluentinc的docker映像构建的。

模式:

{
  "subject": "g-key","version": 1,"id": 1,"schema": "{\"type\":\"record\",\"name\":\"ConnectDefault\",\"namespace\":\"io.confluent.connect.avro\",\"fields\":[{\"name\":\"ID\",\"type\":\"string\"}]}"
}


{
  "subject": "g-value","id": 6,\"fields\":[{\"name\":\"GT_ID\",\"type\":{\"type\":\"int\",\"connect.type\":\"int8\"}},{\"name\":\"BARCODE\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"LP_ID\",\"long\"],{\"name\":\"IN_G_ID\",{\"name\":\"RS\",\"type\":\"string\"},{\"name\":\"NSP\",{\"name\":\"EINT\",{\"name\":\"EINDATE\",\"type\":{\"type\":\"long\",\"connect.version\":1,\"connect.name\":\"org.apache.kafka.connect.data.Timestamp\",\"logicalType\":\"timestamp-millis\"}},{\"name\":\"MKZ\",{\"name\":\"AKM\",\"type\":\"int\"},{\"name\":\"AKT\",{\"name\":\"LZTB\",{\"name\":\"TE\",{\"name\":\"QU\",{\"name\":\"ZWIZ\",{\"name\":\"ENDL\",{\"name\":\"FREIP\",{\"name\":\"HRLZ\",{\"name\":\"PERFZ\",{\"name\":\"EINLO\",{\"type\":\"long\",\"logicalType\":\"timestamp-millis\"}],{\"name\":\"UMKJN\",{\"name\":\"KOLR\",\"int\"],{\"name\":\"LA_ID\",{\"name\":\"VIEW_B\",\"default\":null}]}"
}

欢迎提示

解决方法

CP的当前版本为5.5.1,并且documentation说它具有kqslDB v0.7.1 但是从ksqlDB v0.10开始可以使用'PRIMARY KEY'语法