XMLRecordSetWriter

文档中心 › 组件索引 › XMLRecordSetWriter

XMLRecordSetWriter Controller Service

类型全限定名:cn.org.acal.lynxus.xml.XMLRecordSetWriter

所属 Bundle:cn.org.acal.lynxus:lynxus-record-serialization-services-nar:2.11.8

描述

将 RecordSet 写入 XML。 这些记录由根标签包裹。

标签

xmlresultsetwriterserializerecordrecordsetrow

属性

下表中,加粗的属性为必填项;其余为可选项。表格同时标注默认值、是否支持表达式语言,以及是否为敏感属性(值会被加密)。

名称默认值可选值描述
Schema Write Strategyno-schema
  • 不写出 Schema — 不向 FlowFile 添加任何 Schema 相关信息。
  • Set 'schema.name' Attribute — FlowFile 将被赋予一个名为 'schema.name' 的属性,该属性将指示 Schema Registry 中 schema 的名称。请注意,如果记录的 schema 不是从 Schema Registry 获取的,则不会添加任何属性。
  • 设置 'avro.schema' 属性 — FlowFile 将获得一个名为 'avro.schema' 的属性,该属性将包含描述 FlowFile 中记录的 Avro Schema。FlowFile 的内容不需要是 Avro 格式,但将使用 Schema 的文本。
  • Schema 引用写入器 — Schema 引用信息将通过配置的 Schema 引用写入器服务实现写出。
指定记录的模式应如何添加到数据中。
Schema Cache控制器服务 API:
RecordSchemaCacheService
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定要添加记录模式的模式缓存,以便记录读取器可以快速查找模式。
Schema Reference Writer控制器服务 API:
SchemaReferenceWriter
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
负责使用模式参考信息写入 FlowFile 属性或内容头的服务实现
Schema Access Strategyinherit-record-schema
  • 继承记录 Schema — 用于写入记录的 Schema 与创建 Record 时给出的 Schema 相同。
  • 使用 'Schema Name' 属性 — 要使用的 Schema 名称由 'Schema Name' 属性指定。此属性的值用于在配置的 Schema Registry 服务中查找 Schema。
  • 使用 'Schema Text' 属性 — Schema 本身的文本由 'Schema Text' 属性指定。此属性的值必须是有效的 Avro Schema。如果使用表达式语言,则 'Schema Text' 属性的值在替换表达式后必须有效。
指定如何获取用于解释数据的架构。
Schema Registry控制器服务 API:
SchemaRegistry
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
指定用于架构Registry的Controller Service
Schema Name${schema.name}指定要在架构Registry属性中查找的架构名称
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Schema Version指定在 Schema Registry 中查找 Schema 的版本。如果未指定,则检索 Schema 的最新版本。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Schema Branch指定在 Schema Registry 属性中查找 Schema 时使用的分支名称。如果选择的 Schema Registry 不支持分支,则此值将被忽略。
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Schema Text${avro.schema}Avro 格式的架构文本
支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值)
Schema Reference Reader控制器服务 API:
SchemaReferenceReader
cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8
服务实现负责读取 FlowFile 属性或内容以确定架构参考标识符
Date Format指定读取/写入日期字段时使用的格式。如果未指定,日期字段将被视为自纪元(1970 年 1 月 1 日午夜 GMT)以来的毫秒数。如果指定,值必须匹配 Java java.time.format.DateTimeFormatter 格式(例如,MM/dd/yyyy 表示两位数字的月份,后跟两位数字的日期,后跟四位数字的年份,全部以 '/' 字符分隔,如 01/01/2017)。
Time Format指定读取/写入时间字段时使用的格式。如果未指定,时间字段将被视为自纪元(1970 年 1 月 1 日午夜 GMT)以来的毫秒数。如果指定,值必须匹配 Java java.time.format.DateTimeFormatter 格式(例如,HH:mm:ss 表示 24 小时格式的两位数字的小时,后跟两位数字的分钟,后跟两位数字的秒,全部以 ':' 字符分隔,如 18:04:15)。
Timestamp Format指定读取/写入时间戳字段时使用的格式。如果未指定,时间戳字段将被视为自纪元(1970 年 1 月 1 日午夜 GMT)以来的毫秒数。如果指定,值必须匹配 Java java.time.format.DateTimeFormatter 格式(例如,MM/dd/yyyy HH:mm:ss 表示两位数字的月份,后跟两位数字的日期,后跟四位数字的年份,全部以 '/' 字符分隔;然后后跟 24 小时格式的两位数字的小时,后跟两位数字的分钟,后跟两位数字的秒,全部以 ':' 字符分隔,如 01/01/2017 18:04:15)。
Suppress Null Valuesnever-suppress
  • 从不抑制 — 缺失(在 Schema 中定义但不在记录中)或值为 null 的字段将作为 null 值写出
  • 始终抑制 — 缺失(在 Schema 中定义但不在记录中)或值为 null 的字段将不会写出
  • 抑制缺失值 — 当字段值为 null 时将被写出。但是,如果字段在 Schema 中定义但不在记录中,则该字段不会写出。
指定编写器应如何处理空字段
Pretty Print XMLfalse
  • true
  • false
指定 XML 是否应该被漂亮地打印
Omit XML Declarationfalse
  • true
  • false
指定是否包含 XML 声明
Name of Root Tag指定包装记录集的 XML 根标签名称。如果 Writer 需要在单个 FlowFile 中写入多条记录,则必须定义此属性。
Name of Record Tag指定 XML 记录标签的名称,用于包装记录字段。如果未设置,Writer 将使用 Schema 中的记录名称。
Wrap Elements of Arraysno-wrapping
  • 使用属性作为包装器 — 属性 "Array Tag Name" 的值将用作包装数组元素的标签名。数组字段的字段名将用作元素的标签名。
  • 使用属性作为元素标签 — 属性 "Array Tag Name" 的值将用作数组元素的标签名。数组字段的字段名将用作包装元素的标签名。
  • 无包装 — 数组的元素不会被包装
指定编写器如何包装数组类型字段的元素
数组标签名属性 "Wrap Elements of Arrays" 用于写入数组的标签名
Character SetUTF-8将数据写入 FlowFile 时使用的字符集

状态管理

该组件不存储状态。

受限 (Restricted)

该组件不受限。

提供的 Service API

  • RecordSetWriterFactory (cn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8)

详细说明

XMLRecordSetWriter

XMLRecordSetWriter Controller Service 把记录对象写出为 XML。必须为该 Controller Service 配置一个描述记录对象结构的 schema。多条记录会被包裹在 一个根节点中,根节点的名称可以通过属性配置。如果未配置根节点,则 Writer 期望每个 FlowFile 只有一条记录(不会被包裹)。由于 Avro 不支持为 记录定义属性(attribute),该 Writer 目前不支持写出 XML 属性。

示例:简单记录

RecordSet (
  Record (
    Field "name1" = "value1",
    Field "name2" = 42
  ),
  Record (
    Field "name1" = "value2",
    Field "name2" = 84
  )
)

该记录可以用以下 schema 描述:

{
  "name": "test",
  "namespace": "lynxus",
  "type": "record",
  "fields": [
    {
      "name": "name1",
      "type": "string"
    },
    {
      "name": "name2",
      "type": "int"
    }
  ]
}

假设把 "root_name" 配置为根节点的名称、"record_name" 配置为记录节点的 名称,Writer 会写出如下 XML:

<root_name>
    <record_name>
        <name1>value1</name1>
        <name2>42</name2>
    </record_name>
    <record_name>
        <name1>value2</name1>
        <name2>84</name2>
    </record_name>
</root_name>

该 Writer 还可以配置如何处理记录中的 null 或缺失值:

RecordSet (
  Record (
    Field "name1" = "value1",
    Field "name2" = null
  ),
  Record (
    Field "name1" = "value2",
  )
)

如果 Writer 配置为总是抑制缺失值或 null 值,XML 中只会出现在名为 "name1" 的字段。如果 Writer 配置为只抑制缺失值,第一条记录中名为 "name2" 的字段 会作为无内容的节点出现在 XML 中。如果 Writer 配置为不抑制任何内容, 两条记录中名为 "name2" 的字段都会作为无内容的节点出现在 XML 中。

示例:数组

该 Writer 还可以配置如何写出数组:

RecordSet (
  Record (
    Field "name1" = "value1",
    Field "array_field" = [ 1, 2, 3 ]
  )
)

该记录可以用以下 schema 描述:

{
  "name": "test",
  "namespace": "lynxus",
  "type": "record",
  "fields": [
    {
      "name": "array_field",
      "type": {
        "type": "array",
        "items": int
      }
    },
    {
      "name": "name1",
      "type": "string"
    }
  ]
}

如果 Writer 配置为不包裹数组,它会把记录转换为如下 XML:

<root_name>
    <record_name>
        <name1>value1</name1>
        <array_field>1</array_field>
        <array_field>2</array_field>
        <array_field>3</array_field>
    </record_name>
</root_name>

如果 Writer 配置为包裹数组、使用字段名作为包裹节点、"elem" 作为元素节点的 标签名,它会把记录转换为如下 XML:

<root_name>
    <record_name>
        <name1>value1</field2>
        <array_field>
            <elem>1</elem>
            <elem>2</elem>
            <elem>3</elem>
        </array_field>
    </record_name>
</root_name>

如果 Writer 配置为包裹数组、使用 "wrap" 作为包裹节点、字段名作为元素节点的 标签名,它会把记录转换为如下 XML:


<root_name>
    <record_name>
        <name1>value1</field2>
        <wrap>
            <array_field>1</array_field>
            <array_field>2</array_field>
            <array_field>3</array_field>
        </wrap>
    </record_name>
</root_name>