<?xml version="1.0" encoding="UTF-8"?>
<!--

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

-->
<pipeline>
  <info>
    <name>0017-postgresql-bulkloader</name>
    <name_sync_with_filename>Y</name_sync_with_filename>
    <description/>
    <extended_description/>
    <pipeline_version/>
    <pipeline_type>Normal</pipeline_type>
    <parameters>
    </parameters>
    <capture_transform_performance>N</capture_transform_performance>
    <transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
    <transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
    <created_user>-</created_user>
    <created_date>2021/07/14 15:27:01.196</created_date>
    <modified_user>-</modified_user>
    <modified_date>2021/07/14 15:27:01.196</modified_date>
    <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA=</key_for_session_key>
    <is_key_private>N</is_key_private>
  </info>
  <notepads>
  </notepads>
  <order>
    <hop>
      <from>test data</from>
      <to>PostgreSQL Bulk Loader</to>
      <enabled>Y</enabled>
    </hop>
  </order>
  <transform>
    <name>PostgreSQL Bulk Loader</name>
    <type>PGBulkLoader</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <connection>unit-test-db</connection>
    <delimiter>;</delimiter>
    <enclosure>"</enclosure>
    <load_action>TRUNCATE</load_action>
    <mapping>
      <date_mask/>
      <field_name>key_data</field_name>
      <stream_name>key</stream_name>
    </mapping>
    <mapping>
      <date_mask/>
      <field_name>value_data</field_name>
      <stream_name>value</stream_name>
    </mapping>
    <schema>public</schema>
    <stop_on_error>N</stop_on_error>
    <table>testtable</table>
    <attributes/>
    <GUI>
      <xloc>464</xloc>
      <yloc>128</yloc>
    </GUI>
  </transform>
  <transform>
    <name>test data</name>
    <type>DataGrid</type>
    <description/>
    <distribute>Y</distribute>
    <custom_distribution/>
    <copies>1</copies>
    <partitioning>
      <method>none</method>
      <schema_name/>
    </partitioning>
    <fields>
      <field>
        <set_empty_string>N</set_empty_string>
        <length>-1</length>
        <name>key_data</name>
        <precision>-1</precision>
        <type>String</type>
      </field>
      <field>
        <set_empty_string>N</set_empty_string>
        <length>-1</length>
        <name>value_data</name>
        <precision>-1</precision>
        <type>String</type>
      </field>
    </fields>
    <data>
      <line>
        <item>1</item>
        <item>a</item>
      </line>
      <line>
        <item>2</item>
        <item>b</item>
      </line>
      <line>
        <item>3</item>
        <item>c</item>
      </line>
      <line>
        <item>4</item>
        <item>d</item>
      </line>
    </data>
    <attributes/>
    <GUI>
      <xloc>144</xloc>
      <yloc>128</yloc>
    </GUI>
  </transform>
  <transform_error_handling>
  </transform_error_handling>
  <attributes/>
</pipeline>
