Kafka多层级解析

本文提供Kafka多层级解析场景的实施思路、配置示例和验证方式,可作为实际项目配置参考。

案例1

使用JSON_VALUE解析JSON

{
  "name": "zhangsan"
}
CREATE TABLE from_table
(
    data string
) WITH (
      'connector' = 'kafka',
      'topic' = 'ispong-topic',
      'properties.bootstrap.servers' = '127.0.0.1:30122',
      'scan.startup.mode' = 'latest-offset',
      'format' = 'raw'
);

CREATE TABLE target_table ( 
     username STRING
) WITH ( 
    'connector' = 'print' 
);

INSERT INTO target_table (username)
select JSON_VALUE(data, '$.name') AS name
from from_table;

案例2

使用Flink SQL解析JSON

{
  "details": {
    "username": "zhangsan",
    "age": 12
  }
}
CREATE TABLE from_table
(
  details ROW<username String, age int> 
) WITH (
      'connector' = 'kafka',
      'topic' = 'ispong-topic',
      'properties.bootstrap.servers' = '127.0.0.1:30122',
      'scan.startup.mode' = 'latest-offset',
      'format' = 'json',          
      'json.fail-on-missing-field' = 'false',
      'json.ignore-parse-errors' = 'true'
);

CREATE TABLE target_table ( 
     username STRING,
     age INT 
) WITH ( 
    'connector' = 'print' 
);

INSERT INTO target_table (username, age)
select details.username,details.age
from from_table;

案例3

使用UNNEST解析数组

{
  "username": "zhangsan",
  "hobbies": [
    1,
    2,
    3,
    4
  ]
}
CREATE TABLE from_table (
    username STRING,
    hobbies ARRAY<INT>
) WITH (
    'connector' = 'kafka',
    'topic' = 'ispong-topic',
    'properties.bootstrap.servers' = '127.0.0.1:30122',
    'scan.startup.mode' = 'latest-offset',
    'format' = 'json',          
    'json.fail-on-missing-field' = 'false',
    'json.ignore-parse-errors' = 'true'
);

CREATE TABLE target_table (
    username STRING,
    age INT
) WITH (
    'connector' = 'print'
);

INSERT INTO target_table (username, age)
SELECT 
    username,
    hobby AS age
FROM from_table,
UNNEST(hobbies) AS t(hobby);