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'