我将json(20个键值对)推入kafka并能够使用它-对它进行了测试,以验证是否成功将数据推入kafka。
以下脚本正在创建管道,但未将数据加载到memsql表中。我是否需要修改JSON数据类型的创建管道脚本。
CREATE OR REPLACE PIPELINE omnitracs_gps_evt_pipeline
AS LOAD DATA KAFKA '192.168.188.110:9092/ib_Omnitracs'
INTO procedure INGEST_OMNITRACS_EVT_PROC;
DELIMITER //
CREATE OR REPLACE PROCEDURE INGEST_OMNITRACS_EVT_PROC(batch query(evt_json json))
AS
BEGIN
INSERT INTO TEST(id, name)
SELECT evt_json::ignition,evt_json::positiontype
FROM batch;
ECHO SELECT 'HELLO';
END
//
DELIMITER ;
TEST PIPELINE omnitracs_gps_evt_pipeline LIMIT 5;
START PIPELINE omnitracs_gps_evt_pipeline FOREGROUND LIMIT 5 BATCHES;
任何人都可以帮忙。
答案 0 :(得分:1)
您可能应该修改CREATE PIPELINE的AS LOAD DATA子句以执行本机JSON加载,如此处所述:https://docs.memsql.com/sql-reference/v6.7/load-data/#json-load-data。
有两个原因:
编写的管道将期望来自kafka的输入位于TSV中 带有1个字段的格式。 TSV是默认格式,它可以推断期望的字段数 从参数到目标存储过程。输入JSON记录实际上很可能会成功解析,但是我不会依赖它。
使用本机JSON管道的subvalue_mapping子句来执行性能更高 提取并插入:: ignition和:: positiontype, 完全跳过存储过程的开销。另外,书面的管道将 实例化临时内存中的JSON数据结构,这相对来说 昂贵。
我建议类似以下内容:
CREATE OR REPLACE PIPELINE omnitracs_gps_evt_pipeline
AS LOAD DATA KAFKA '192.168.188.110:9092/ib_Omnitracs'
INTO TABLE TEST
FORMAT JSON
(
id <- ignition_event,
name <- position_type
);
答案 1 :(得分:0)
管道的存储过程中不允许使用ECHO SELECT。您应该得到一个错误提示,说的是,当您运行START PIPELINE ... FOREGROUND时,或者如果定义了过程,则在CREATE PIPELINE时运行。
答案 2 :(得分:0)
从kafka的生产者中删除ProducerConfig.TRANSACTIONAL_ID_CONFIG配置后,管道正在运行。
CREATE PIPELINE FEB13_PIPELINE_2 AS LOAD DATA KAFKA '192.168.188.110:9092/FEB13_PROC' INTO procedure INGEST_EVT_PROC; DELIMITER // CREATE OR REPLACE PROCEDURE INGEST_EVT_PROC(batch query(evt_json json)) AS BEGIN INSERT INTO TEST_FEB13(ID, NAME) SELECT evt_json::ID,evt_json::NAME FROM batch; END // DELIMITER ;
现在只需一个小小的疑问,即使在表列中也添加了双引号。如何逃脱。 JSON发送到kafka:“ {'ID':1,'NAME':\'a \'}”