gpload 导入数据的三种模式insert、update和merge

Pivotal Greenplum Database Documentation v4.3.x

gpload可以将外部数据导入至数据库,并且提供了三种导入模式,基本的导入配置YML文件如下所示:

The basic structure of a load control file is:

---
VERSION: 1.0.0.1
DATABASE: db_name
USER: db_username
HOST: master_hostname
PORT: master_port
GPLOAD:
   INPUT:
    - SOURCE:
         LOCAL_HOSTNAME:
           - hostname_or_ip
         PORT: http_port
       | PORT_RANGE: [start_port_range, end_port_range]
         FILE: 
           - /path/to/input_file
         SSL: true | false
         CERTIFICATES_PATH: /path/to/certificates
    - COLUMNS:
           - field_name: data_type
    - TRANSFORM: 'transformation'
    - TRANSFORM_CONFIG: 'configuration-file-path' 
    - MAX_LINE_LENGTH: integer 
    - FORMAT: text | csv
    - DELIMITER: 'delimiter_character'
    - ESCAPE: 'escape_character' | 'OFF'
    - NULL_AS: 'null_string'
    - FORCE_NOT_NULL: true | false
    - QUOTE: 'csv_quote_character'
    - HEADER: true | false
    - ENCODING: database_encoding
    - ERROR_LIMIT: integer
    - ERROR_TABLE: schema.table_name
   EXTERNAL:
      - SCHEMA: schema | '%'
   OUTPUT:
    - TABLE: schema.table_name
    - MODE: insert | update | merge
    - MATCH_COLUMNS:
           - target_column_name
    - UPDATE_COLUMNS:
           - target_column_name
    - UPDATE_CONDITION: 'boolean_condition'
    - MAPPING:
              target_column_name: source_column_name | 'expression'
   PRELOAD:
    - TRUNCATE: true | false
    - REUSE_TABLES: true | false
   SQL:
    - BEFORE: "sql_command"
    - AFTER: "sql_command"

        insert模式适用于全新数据的导入,这时目标数据表中没有要导入的数据,所有外部表中要导入的数据都会新增(insert)到目标数据表中。

       update模式适用于目标表已有数据的更新,根据yml配置的配置列来匹配数据对更新列进行更新,也可设置更新条件,满足条件的更新,不满足条件的不进行更新。不支持新增操作。

       merge模式包含insert和update,不仅可以进行数据库中没有数据的新增操作;也可以对数据库中已有的数据,外部表(csv文件)中有其相应的更新数据 进行更新操作,以外部表为准进行同步更新。


下面就yml文件中的输出部分的配置进行分析:

OUTPUT      必须项。定义最终source文件加载到的目标表。

TABLE          必须项。目标表。

 MODE         可选项。有三种模式:

        insert,插入数据;

       update,当MATCH_COLUMNS参数值(相当于关联列)等于加载数据时,更新UPDATE_COLUMS参数设置的列(相当于update的列)。 可选设置(不是必需)UPDATE_CONDITION参数(相当于where过滤条件)。

        merge,  加载数据时,插入目标表中不存在的数据,更新目标中存在的数据。

MATCH_COLUMNS       在UPDATE或者MERGE模式下使用。相当于关联列。这里写目标表的列名。一般配置唯一列(主键)

UPDATE_COLUMNS      在UPDATE或者MERGE模式下使用。更新的目标表列名。

UPDATE_CONDITION    可选项。目标表的列名,相当于where条件。用在update或者merge模式。目标表中只有满足条件的记         录才能更改,(merge情况下,只要是新增数据都可以insert,但只有满足条件的记录才能update)

MAPPING      可选项。如果设置了MAPPING参数,那么前面设置的COLUMNS参数会失效,因为MAPPING级别高于                        COLUMNS。关联格式:target_column_name: source_column_name。where过滤格式:target_column_name: 'expression'

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`INSERT INTO ... ON DUPLICATE KEY UPDATE` 和 `MERGE INTO` 都是用于在数据库中进行更新或插入操作的语句。 `INSERT INTO ... ON DUPLICATE KEY UPDATE` 语句用于在插入一行数据时,如果该行数据已经存在于表中,则更新该行数据的值,否则插入一行新数据。 例如: ``` INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3) ON DUPLICATE KEY UPDATE column1 = value1, column2 = value2, column3 = value3; ``` 其中,如果 `(column1, column2)` 是表中的主键或唯一索引,当插入 `(value1, value2, value3)` 这一行数据时,如果已经存在 `(value1, value2)` 这一行数据,则更新该行数据的值为 `(value1, value2, value3)`,否则插入一行新数据。 `MERGE INTO` 语句是 Oracle 数据库中的一种语法,用于在一个表中进行插入、更新和删除操作。它的语法如下: ``` MERGE INTO target_table USING source_table ON (condition) WHEN MATCHED THEN UPDATE SET column1 = value1, column2 = value2 WHEN NOT MATCHED THEN INSERT (column1, column2) VALUES (value1, value2) ``` 其中,`target_table` 是目标表,`source_table` 是源表,`condition` 是连接条件,`UPDATE SET` 子句用于更新目标表的数据,`INSERT` 子句用于向目标表中插入新数据。 `MERGE INTO` 语句能够实现 `INSERT INTO ... ON DUPLICATE KEY UPDATE` 的功能,同时还可以进行删除操作。但需要注意的是,`MERGE INTO` 语句只能在 Oracle 数据库中使用,而 `INSERT INTO ... ON DUPLICATE KEY UPDATE` 语句则可以在其他数据库中使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值