1 gpload导入数据的三种模式
insert、update、merge
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’
2.配置的yml
---
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"