【问题标题】:Create table in kafka using ksqldb-server使用 ksqldb-server 在 kafka 中创建表
【发布时间】:2021-02-24 07:07:48
【问题描述】:

我正在尝试使用以下代码(bash 脚本)通过其 REST 接口使用(Confluent)ksqldb-server 创建一个 kafka 表:

KSQLDB_COMMAND="CREATE TABLE sample_table \
  (xkey VARCHAR, \
   xdata VARCHAR) \
  WITH (KAFKA_TOPIC=\'sample-topic\', \
        VALUE_FORMAT=\'JSON\', \
       KEY=\'xkey\'); "

COMMAND="curl -X 'POST' '$KSQLDB_SERVER' \
    -H 'Content-Type: application/vnd.ksql.v1+json; charset=utf-8' \
    -d '{ \"ksql\": \"$KSQLDB_COMMAND\" }' "
eval $COMMAND

返回如下错误输出信息:

{"@type":"statement_error","error_code":40001,"message":"Failed to prepare statement: Invalid config variable(s) in the WITH clause: KEY","statementText":"CREATE TABLE sample_table (xkey VARCHAR, xdata VARCHAR) WITH (KAFKA_TOPIC='sample-topic', VALUE_FORMAT='JSON', KEY='xkey');","entities":[]}%

该错误表明实际语句中存在错误,尤其是 KEY 属性。

我可以使用 REST 接口获取基本命令(“LIST STREAMS”等)但无法创建表,所以我认为这是 KSQL 语句或我如何创建 bash 命令(在“COMMAND”中)的问题变量)。

感谢任何帮助。

【问题讨论】:

  • 这只是一个 bash 字符串变量。请显示您的实际 REST 调用
  • 抱歉...我添加了命令执行...
  • 根据文档,您应该将PRIMARY KEY 放在列上,而不是在 WITH docs.ksqldb.io/en/latest/developer-guide/ksqldb-reference/…
  • 您提供的链接上的已检查文档...站点页面底部的示例具有“WITH”子句,因此从我所看到的情况来看,这不是问题...话虽如此,我尝试按照您的说明添加 PRIMARY KEY 并得到相同的错误。
  • 该页面上没有示例将 KEY 放在 WITH 正文中,因为您收到的错误表明问题是问题,而不是您的 bash 语法

标签: apache-kafka confluent-platform ksqldb


【解决方案1】:

我花了相当多的时间进行实验,并让这个简单的示例运行起来(我最初的尝试需要太多的 bash 变量替换以使其有用/可维护,所以这个版本被简化了很多)。我还发现 KSQLDB 表名必须遵循表名的常规 SQL 命名约定(即 alpha、下划线等......但没有连字符,这在我的原始问题中导致了一堆错误......我应该阅读文档更仔细)。

以下工作(您可能需要更改您的 KSQLDB 服务器地址)...只需进行少量更改,几乎可以执行任何 KSQLDB 命令:

####
# NOTE: table MUST be alpha (underscores are OK)... hyphens are not allowed
####
KSQLDB_SERVER="http://localhost:8088/ksql"
KSQLDB_TABLE="some_table"
KSQLDB_TOPIC="some_topic"
VALUE_FORMAT="JSON"

FMT="{ \"ksql\": \"CREATE TABLE %s (key VARCHAR PRIMARY KEY, data VARCHAR) WITH (KAFKA_TOPIC='%s', VALUE_FORMAT='%s');\" }"
JSON_DATA=$(printf "$FMT" "$KSQLDB_TABLE" "$KSQLDB_TOPIC" "$VALUE_FORMAT")

curl -X "POST" "$KSQLDB_SERVER" \
     -H "Content-Type: application/vnd.ksql.v1+json; charset=utf-8" \
     -d "$JSON_DATA"

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 2021-05-26
    • 2020-08-18
    • 2021-09-09
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多