![](/img/trans.png)
[英]How to create a table in KAFKA using Confluent KSQLDB with a console / command line / cli?
[英]Create table in kafka using ksqldb-server
我正在嘗試使用以下代碼(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
返回以下錯誤 output 消息:
{"@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 變量替換以使其有用/可維護,所以這個版本被簡化了很多)。 我還發現 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"
您不能為表指定 KEY,KEY 用於流。 您應該在類型聲明中對表使用 PRIMARY KEY。例如:
創建或替換表 TABLE_1 (ID INT PRIMARY KEY, EMAILADDRESS VARCHAR, ISPRIMARY BOOLEAN, USERID INT, PARANT INT)WITH (KAFKA_TOPIC='test_1', VALUE_FORMAT='AVRO', KEY_FORMAT='AVRO');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.