当前版本Hologres支持使用COPY命令导入客户端数据,您可以根据业务需求将标准输入的数据导入到指定的Hologres表中。

命令介绍

COPY:从客户端标准输入导入数据到指定表中。

阿里云2000元代金券免费领,最新优惠1折抢购,2核4G云服务器仅799元/3年,新老用户同享,立即抢购>>>

COPY FROM:将数据从标准输入导入到表(将数据追加到表中已有的内容)

命令格式

Hologres当前版本仅支持以下copy语句

COPY table_name [ ( column_name [, ...] ) ]     FROM STDIN     [ [ WITH ] ( option [, ...] ) ]     where option can be one of:      FORMAT format_name     DELIMITER 'delimiter_character'     NULL 'null_string'     HEADER [ boolean ]     QUOTE 'quote_character'     ESCAPE 'escape_character'     FORCE_QUOTE { ( column_name [, ...] ) | * }     FORCE_NOT_NULL ( column_name [, ...] )

参数说明

  1. table_name:指定表名。
  2. STDIN :指定从客户端输入。
  3. FORMAT:支持text、csv格式,默认是text。
  4. DELIMITER:指定字段分隔符,默认为文本格式的制表符, CSV格式的逗号,如DELIMITER AS ','

使用示例

  1. 使用stdin导入数据
    -- 1.建表 CREATE  TABLE copy_test (   id    int,   age   int,   name  text ) ;  --2. 导入数据(按回车键结束数据输入)  COPY copy_test from stdin WITH DELIMITER AS ',' NULL AS ''; 53444,24,wangming 55444,38,ligang 55444,38,luyong .  --查数据 select * from  copy_test;

    使用COPY命令导入客户端数据_客户端数据_数据接入_交互式分析Hologres

  2. 使用stdin导入CSV格式
    -- 1. 建表 create table partsupp ( ps_partkey          integer not null,                         ps_suppkey     integer not null,                         ps_availqty    integer not null,                              ps_supplycost  float  not null,                         ps_comment     text not null );  --2.导入数据 copy partsupp from stdin with delimiter '|' csv;   1|2|3325|771.64|final theodolites  1|25002|8076|993.49|ven ideas .  --3.查数据 select * from  partsupp;

    使用COPY命令导入客户端数据_客户端数据_数据接入_交互式分析Hologres

  3. 利用CopyManager实现JDBC客户端文件导入
    package com.aliyun.hologram.test.jdbc;  import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.sql.*; import java.util.Properties;  import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection;  public class jdbcCopyFile {      public static void main(String args[]) throws Exception {         System.out.println(copyFromFile(getConnection(), "/Users/feng/Workspace/region.tbl", "region"));     }      public static Connection getConnection() throws Exception {         Class.forName("org.postgresql.Driver");         String url = "jdbc:postgresql://endpoint:port/dbname";         Properties props = new Properties();     //set db user         props.setProperty("user", "AAA");//当前账号的access id     //set db password         props.setProperty("password", "BBB");//当前账号的access key         return DriverManager.getConnection(url, props);     }      /**      * 导入文件到数据库      *       * @param connection      * @param filePath      * @param tableName      * @return      * @throws SQLException      * @throws IOException      */     public static long copyFromFile(Connection connection, String filePath, String tableName)             throws SQLException, IOException {         long count = 0;         FileInputStream fileInputStream = null;          try {             CopyManager copyManager = new CopyManager((BaseConnection) connection);             fileInputStream = new FileInputStream(filePath);             count = copyManager.copyIn("COPY " + tableName + " FROM STDIN delimiter '|' csv", fileInputStream);         } finally {             if (fileInputStream != null) {                 try {                     fileInputStream.close();                 } catch (IOException e) {                     e.printStackTrace();                 }             }         }         return count;     }  }

使用说明

  1. 数据类型支持
    当前仅支持以下数据类型:

    • int4
    • int8
    • float4
    • float8
    • float8
    • text
  2. 场景支持
    • 如果是分区表,只能往指定分区子表插入,不支持往分区父表COPY。
    • 当前版本仅支持COPY FROM STDIN,不支持COPY TO。
    • 暂不支持导入本地文件。
  3. 更多关于copy的用法请参见PostgreSQL官网文档copy