gplaod从csv导入数据到gp库

举报
Nick Qiu 发表于 2021/07/27 18:22:30 2021/07/27
【摘要】 简要介绍本文讲解如何使用gpload从csv文件中导入数据到gp库内。本文使用的操作环境是centos7 连接的gp版本为4.3.33.3 操作步骤# 安装unzipyum install unzip# 安装pythonyum install pythonyum install python-pip# 安装pyyaml包pip install pyyaml # 下载gpload安装包: h...

简要介绍

本文讲解如何使用gpload从csv文件中导入数据到gp库内。本文使用的操作环境是centos7 连接的gp版本为4.3.33.3

操作步骤

# 安装unzip
yum install unzip
# 安装python
yum install python
yum install python-pip
# 安装pyyaml包
pip install pyyaml 

# 下载gpload安装包: https://network.pivotal.io/products/vmware-tanzu-greenplum#/releases/455366 ,其中 centos 下载 Loaders for RHEL 5, 6 & 7
# 加压文件
unzip greenplum-loaders-4.3.33.3-build-1-rhel5-x86_64.zip

# 执行下面命令,中间大多时候输入yes
./greenplum-loaders-4.3.33.3-build-1-rhel5-x86_64.bin

# 出现如下提示,输入想安装程序的路径,程序默认安装/usr/local/路径下,可根据自己想要安装的路径进行指定;
# Installation complete
# Greenplum Loaders is installed in:  这时候输入/usr/local路径

  • vi ~/.bashrc ,插入如下行
source /root/yes/greenplum_loaders_path.sh
  • 数据文件
cat << 'EOF' > data.csv
序号|名字
1,aaa 
2,zhangsan 
3,wanger 
4,mazi
5,mazi1
EOF
  • 创建数据库表
CREATE TABLE "schema_name"."table_name" (
  "index" numeric(10),
  "name" varchar(100)
);

ALTER TABLE "schema_name"."table_name" 
  OWNER TO "username";
  • 配置文件 config.yml
cat << 'EOF' > config.yml
VERSION: 1.0.0.1
DATABASE: dbname
USER: username
PASSWORD: userpassword
HOST: 10.10.10.10
PORT: 5432
GPLOAD: 
  INPUT: 
    - SOURCE: 
        LOCAL_HOSTNAME: 
          - 10.10.10.149
        PORT: 55555 
        FILE: 
          - /root/data.csv 
    - COLUMNS: 
        - id: int 
        - name: text 
    - FORMAT: csv 
    - DELIMITER: ',' 
    - ERROR_LIMIT: 25 
    - HEADER: true
  OUTPUT: 
    - TABLE: schema_name.table_name 
    - MODE: insert
  SQL:
    - BEFORE: "TRUNCATE TABLE schema_name.table_name "
EOF

insert | update | merge #指定操作模式,默认是insert。merge操作不支持使用随机分布策略的表

  • 执行如下命令,导入数据

gpload -f config.yml

配置文件参考

VERSION: 1.0.0.1           #指定控制文件schema的版本
DATABASE: db_name      #指定连接数据库的名字,如果没有指定,由环境变量$PGDATABASE,或者通过gpload参数-d指定
USER: db_username       #指定连接目标数据库的用户名,如果不使用超级管理员,服务参数gp_external_grant_privileges必须设置成on
HOST: master_hostname  #指定master主机名,也可以通过gpload的-h选项,或者环境变量$PGHOST指定
PORT: master_port         #指定master的连接端口号,默认是5432,或者通过gpload命令的-p选项或者环境变量$PGPORT指定。
GPLOAD:                       #必须指定,表示装载设置部分在它下面必须定义INPUT:和OUTPUT:两个部分。
    INPUT:                      #必须指定,这部分指定装载数据的格式和位置
        - SOURCE:            #必须指定,定义source文件的位置,每个输入部分可以定义多个source部分
            LOCAL_HOSTNAME:    #指定gpload运行的主机名称和ip地址,如果有多块网卡,可以同时使用它们,提高装载速度。默认只使用首选主机名和IP
                - hostname_or_ip
            PORT: http_port           #指定gpfdist使用的端口,也可以选择端口范围,由系统选择,如果同时指定,port设置优先级| PORT_RANGE: [start_port_range, end_port_range]
            FILE:                      #指定装载数据文件的位置,目录或者命名管道。如果文件使用gpzip或者bzip2进行了压缩,它可以自动解压。可以使用通配符*和C语言风格的关系匹配模式指定多个文件
                - /path/to/input_file
        - COLUMNS:                 #指定数据源的数据格式,如果没有指定这部分,source表的列顺序,数量,以及数据类型必须与目标表一致
            - field_name: data_type
        - FORMAT: text | csv      #指定文件格式是text还是csv
        - DELIMITER: 'delimiter_character'  #指定文本数据域(列)之间的分割符,默认是|
        - ESCAPE: 'escape_character' | 'OFF'  #text定义转义字符,text格式默认是\,在text格式中可以选择off关掉转义字符
        - NULL_AS: 'null_string'       #指定描述空值的字符串,text格式默认是\N,csv格式不使用转义符号的空值
        - FORCE_NOT_NULL: true | false #csv格式,强制所有字符默认都用”“括起,因此不能有空值,如果两个分割符之间没有值,被当做0长度字符串,认为值已经丢失
        - QUOTE: 'csv_quote_character'  #csv指定转义字符,默认是"
        - HEADER: true | false          #是否跳过数据文件第一行,当做表头
        - ENCODING: database_encoding   #定数据源的字符集
        - ERROR_LIMIT: integer          #指定由于不符合格式数据记录的上限,如果超过该上限,gpload停止装载,否则正确记录可以被装载,错误记录抛出写入错误表。但它仅支持数据格式错误,不支持违背约束的问题
        - ERROR_TABLE: schema.table_name #指定不符合格式要求记录的错误表。如果指定的表不存在系统自动创建
    OUTPUT:
        - TABLE: schema.table_name       #指定装载的目标表
        - MODE: insert | update | merge   #指定操作模式,默认是insert。merge操作不支持使用随机分布策略的表
        - MATCH_COLUMNS:                     #为update操作和merge操作指定匹配条件。
            - target_column_name            
        - UPDATE_COLUMNS:                    #为update操作和merge操作指定更新的列
            - target_column_name
        - UPDATE_CONDITION: 'boolean_condition'  #指定where条件,目标表中只有满足条件的记录才能更改,(merge情况下,只有满足条件的记录才能insert)
        - MAPPING:                            #指定source列和目标列的映射关系。
            target_column_name: source_column_name | 'expression'
    PRELOAD:                                 #指定load之前的操作
        - TRUNCATE: true | false        #如果设置成true,装载之前先删除目标表中所有记录,再装载
        - REUSE_TABLES: true | false  #设置成true,不会删除外部表对象或者中间表对象。从而提升性能。
    SQL:
        - BEFORE: "sql_command"        #装载操作开始前执行的SQL,比如写日志表
        - AFTER: "sql_command"          #装载操作之后执行的SQL

其他参考

官方参考文档

网友文章

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。