Apache Seatunnel-Transform plugin : Json [Spark]

作者: Apache Seatunnel

对原始数据集指定字段进行Json解析

Options

nametyperequireddefault value
[source_field] source_field-string   
[target_field] target_field-string   
[schema_dir] schema_dir-string   
[schema_file] schema_file-string   
[common-options] common-options-string   
source_field [string]

源字段,若不配置默认为raw_message

target_field [string]

目标字段,若不配置默认为__root__,Json解析后的结果将统一放置Dataframe最顶层

schema_dir [string]

样式目录,若不配置默认为$seatunnelRoot/plugins/json/files/schemas/

schema_file [string]

样式文件名,若不配置默认为空,即不指定结构,由系统根据数据源输入自行推导。

common options [string]

Transform 插件通用参数,详情参照 [Transform Plugin]

Schema Use cases

  1. json schema 使用场景

单个任务的多数据源中可能包含不同样式的 json 数据,比如来自 kafka 的 topicA 样式为

{
  "A": "a_val",
  "B": "b_val"
}

来自 topicB 样式为

{
  "C": "c_val",
  "D": "d_val"
}

运行 Transform 时需要将 topicA 和 topicB 的数据融合在一张宽表中进行计算。则可指定一份 schema,其内容样式为:

{
  "A": "a_val",
  "B": "b_val",
  "C": "c_val",
  "D": "d_val"
}

则 topicA 和 topicB 的融合输出结果为:

+-----+-----+-----+-----+

|A    |B    |C    |D    |
+-----+-----+-----+-----+
|a_val|b_val|null |null |

|null |null |c_val|d_val|
+-----+-----+-----+-----+

Examples

  1. 不使用target_field
    json {
        source_field = "message"
    }
    
  2. Source
    +----------------------------+

    |message                   |
    +----------------------------+
    ||

    | |
    +----------------------------+
  • Sink
    +----------------------------+---+-----+

    |message                   |age|name |
    +----------------------------+---+-----+
    | |28 |gary |

    ||23 |ricky|
    +----------------------------+---+-----+
  1. 使用target_field
    json {
        source_field = "message"
        target_field = "info"
    }
    
  2. Souce
    +----------------------------+

    |message                   |
    +----------------------------+
    ||

    | |
    +----------------------------+
  • Sink
    +----------------------------+----------+

    |message                   |info      |
    +----------------------------+----------+
    | |[28,gary] |

    ||[23,ricky]|
    +----------------------------+----------+

json处理的结果支持select * from where info.age = 23此类SQL语句

  1. 使用 schema_file

    json {
        source_field = "message"
        schema_file = "demo.json"
    }
    
  2. Schema

    在 Driver Node 的 ~/seatunnel/plugins/json/files/schemas/demo.json 中放置内容如下:

    {
       "name": "demo",
       "age": 24,
       "city": "LA"
    }
  • Source
    +----------------------------+

    |message                   |
    +----------------------------+
    ||

    | |
    +----------------------------+
  • Sink
    +----------------------------+---+-----+-----+

    |message                     |age|name |city |
    +----------------------------+---+-----+-----+
    | |28 |gary |null |

    ||23 |ricky|null |
    +----------------------------+---+-----+-----+

若使用 cluster 模式进行部署,需确保 json schemas 目录被打包到 plugins.tar.gz 中

文章列表

更多推荐

更多
这里什么都没有

近期文章

更多
文章目录

    推荐作者

    更多