Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 无法从ksqldb中的卡夫卡主题读取消息_Apache Kafka_Ksqldb - Fatal编程技术网

Apache kafka 无法从ksqldb中的卡夫卡主题读取消息

Apache kafka 无法从ksqldb中的卡夫卡主题读取消息,apache-kafka,ksqldb,Apache Kafka,Ksqldb,为上述json创建流: 创建流\u名称( 事件结构< 标题结构< 名字叫瓦查尔, 版本VARCHAR, 制片人瓦查尔, 瓦查尔频道, 国家代码VARCHAR 事件时间戳VARCHAR >, 身体结构< customerIdentifiers结构< 客户识别码VARCHAR, 自定义类型VARCHAR >, accountIdentifiers结构< accountIdentifier VARCHAR, accountIdType VARCHAR >,

为上述json创建流:

创建流\u名称(
事件结构<
标题结构<
名字叫瓦查尔,
版本VARCHAR,
制片人瓦查尔,
瓦查尔频道,
国家代码VARCHAR
事件时间戳VARCHAR
>,
身体结构<
customerIdentifiers结构<
客户识别码VARCHAR,
自定义类型VARCHAR
>,
accountIdentifiers结构<
accountIdentifier VARCHAR,
accountIdType VARCHAR
>,                            
eventDetails结构<
transactionDateTime变量字符,
transactionDate VARCHAR,
productDescription VARCHAR,
蒙塔维拉格·瓦尔查尔,
瓦查尔日均酒店
>
>
>
)与(
卡夫卡主题=‘主题1’,
值\格式='JSON',
分区=1
;
我无法从流中读取消息:

{
 "event": {
  "header":{ 
   "name":"abc",
   "version":"1.0",
   "producer":"123",
   "channel":"lab",
   "countryCode":"US"
  },
  "body":{
   "customerIdentifiers":[ 
    {"customerIdentifier":"1234","customerIdType":"cc"},
    {"customerIdentifier":"234", "customerIdType":"id"}
   ],
   "accountIdentifiers":[
    {"accountIdentifier":"123",    "accountIdType":"no"}, 
    {"accountIdentifier":"Primary","accountIdType":"da"}
   ],
   "eventDetails":{
    "transactionDateTime":"2019-03-26 05:28:13.000",
    "transactionDate":"2019-03-26",
    "monthAverage":"188",
    "dailyAverage":"7"
   }
  }
 }
}

有什么建议吗?

您可能会遇到反序列化错误,因为您创建的流架构与数据架构不匹配

重新格式化示例数据和SQL后,错误变得更加明显:

  • $.event.body.customerIdentifiers
    元素是一个结构数组,但DDL将其定义为一个结构
  • $.event.body.accountIdentifiers
    元素是一个结构数组,但DDL将其定义为一个结构
应该起作用的DDL是:

创建流\u名称(
事件结构<
标题结构<
名字叫瓦查尔,
版本VARCHAR,
制片人瓦查尔,
瓦查尔频道,
国家代码VARCHAR
事件时间戳VARCHAR
>,
身体结构<
customerIdentifiers数组>,
accountIdentifiers数组>,
eventDetails结构<
transactionDateTime变量字符,
transactionDate VARCHAR,
productDescription VARCHAR,
蒙塔维拉格·瓦尔查尔,
瓦查尔日均酒店
>
>
>
)与(
卡夫卡主题=‘主题1’,
值\格式='JSON',
分区=1
;
还要注意,数据不包含DDL中的以下内容(尽管这不会导致任何问题,因为字段将仅为
NULL
):

  • $.event.header.eventTimeStamp
  • $.event.body.eventDetails.productDescription

我发现下面的标签“customerIdentifier”有问题:[{“customerIdentifier”:“1234”,“customerIdType”:“cc”},{“customerIdentifier”:“234”,“customerIdType”:“id”}],“accountIdentifier”:[{“accountIdentifier”:“123”,“accountIdType”:“no”},{“accountIdentifier”:“Primary”,“accountIdType”:“da”}]我已经向提交了一个编辑,这使其他人更容易访问该问题。请在以后提问时自己这样做。这比使用EXTRACTJSONFIELD更好吗?使用ExtractJSON字段,我认为您可以创建第一个流,其中包含顶级元素,第二个流使用create as来创建字段名
select * from STREAM_NAME emit changes;