使用 PIPE 选项将数据从一个实例复制到另一个

可使用命名管道将数据从一个 GBase 8s 实例复制到另一个,而无需将数据写入中间文件。

可使用命名管道将数据从一个 GBase 8s 实例卸载,然后装入另一个实例,而无需将数据写入中间文件。也可使用命名管道将数据从一个表复制到同一个 GBase 8s 实例上的另一个表。 在以下示例中,数据将从一个实例上的源表复制到第二个实例上的目标表。

必须首先根据所用硬件平台使用以下命令之一创建命名管道。在本示例中,命名管道称为 pipe1

% mkfifo /work/pipe1
% mknod /work/pipe1

执行以下步骤,将数据从源实例上的表复制到同一台计算机上目标实例中的表。

  1. 在源实例上创建源表。在本示例中,源表称为 source_data_table
    CREATE TABLE source_data_table 
    (
      empid    CHAR(5),
      empname  VARCHAR(40),
      empaddr  VARCHAR(100)
    );
  2. 在源实例上创建外部表。在本示例中,外部表称为 ext_table
    CREATE EXTERNAL TABLE ext_table
    (
      empid    CHAR(5),
      empname  VARCHAR(40),
      empaddr  VARCHAR(100)
    )
    USING
    (DATAFILES
      (
        'PIPE:/work/pipe1'
      )
    );
  3. 在目标实例上创建目标表。在本示例中,目标表称为 destin_data_table
    CREATE TABLE destin_data_table
    (
      empid    CHAR(5),
      empname  VARCHAR(40),
      empaddr  VARCHAR(100)
    );
  4. 在目标实例上创建外部表。在本示例中,外部表称为 ext_table
    CREATE EXTERNAL TABLE ext_table
    (
      empid    CHAR(5),
      empname  VARCHAR(40),
      empaddr  VARCHAR(100)
    )
    USING
    (DATAFILES
      (
        'PIPE:/work/pipe1_1'
      )
    );
  5. 从 UNIX™ shell 运行以下命令。该命令将数据从 /work/pipe1 重定向到 /work/pipe1_1
    cat /work/pipe1 > /work/pipe1_1
  6. 在目标实例上运行以下命令,以将数据从命名管道定向到目标表:
    INSERT INTO destin_data_table SELECT * FROM ext_table;
  7. 在源实例上运行以下命令,以将数据假脱机到命名管道:
    INSERT INTO ext_table SELECT * FROM source_data_table;

    可使用多个管道,方法是在 DATAFILES 子句中插入多个 PIPE 语句,并为每个语句创建一个命名管道。