将数据导出到另一个数据库

导出到 VERTICA 将表数据从一个 Vertica 数据库导出到另一个。需要满足以下要求:

  • 您已经使用 CONNECT TO VERTICA 打开了与目标数据库的连接。

  • 源数据库最多只能低于目标数据库一个主要版本。

  • 目标数据库中的表必须存在。

  • 源表列和目标表列必须具有相同或兼容的数据类型。

每个 EXPORT TO VERTICA 语句一次仅从一个表导出数据。您可以将相同的数据库连接用于多个导出操作。

导出过程

导出过程分为三步:

  1. 使用 CONNECT TO VERTICA 连接到目标数据库。

    例如:

    => CONNECT TO VERTICA testdb USER dbadmin PASSWORD '' ON 'VertTest01', 5433;
    CONNECT
    
  2. 使用 EXPORT TO VERTICA 导出所需数据。例如,以下语句将 customer_dimension 中的所有表数据导出到目标数据库 testdb 中的同名表中:

    
    => EXPORT TO VERTICA testdb.customer_dimension FROM customer_dimension;
    Rows Exported
    ---------------
             23416
    (1 row)
    
  3. DISCONNECT 当所有导出和导入操作完成后与目标数据库断开连接:

    => DISCONNECT testdb;
    DISCONNECT
    

源列和目标列之间的映射

如果像前面的示例一样将所有表数据从一个数据库导出到另一个数据库,则 EXPORT TO VERTICA 可以省略指定列列表。仅当两个表中的列定义都符合以下条件时,这才有可能:

  • 列数相同

  • 列名相同

  • 列序列相同

  • 列数据类型匹配或兼容

如果其中任何一个条件不成立,则 EXPORT TO VERTICA 语句必须包含列列表,这些列列表将源列和目标列显式映射到彼此,如下所示:

  • 包含相同数量的列。

  • 按相同顺序列出源列和目标列。

  • 将具有相同(或兼容)数据类型的列配对。

例如:

=> EXPORT TO VERTICA testdb.people (name, gender, age)
   FROM customer_dimension (customer_name, customer_gender, customer_age);

导出表数据的子集

通常,您可以通过两种方式导出表数据的子集:

  • 导出特定源表列的数据。

  • 导出源表上查询(包括历史查询)的结果集。

在这两种情况下,EXPORT TO VERTICA 语句通常必须为源表和目标表指定列列表。

以下示例将源表中的三列数据导出到目标表中的三列。因此,EXPORT TO VERTICA 语句为每个表指定一个列列表。每个列表中的列顺序决定了 Vertica 如何将目标列映射到源列。在本例中,目标列 namegenderage 分别映射到源列 customer_namecustomer_gendercustomer_age

=> EXPORT TO VERTICA testdb.people (name, gender, age) FROM customer_dimension
(customer_name, customer_gender, customer_age);
Rows Exported
---------------
         23416
(1 row)

下一个示例查询源表 customer_dimension,将结果集导出到目标数据库 testdb 中的表 ma_customers

=> EXPORT TO VERTICA testdb.ma_customers(customer_key, customer_name, annual_income)
   AS SELECT customer_key, customer_name, annual_income FROM customer_dimension WHERE customer_state = 'MA';
Rows Exported
---------------
          3429
(1 row)

导出标识列

您可以导出包含标识值和自动增量值的表(或列),但目标表的序列值不会自动递增。您必须使用 ALTER SEQUENCE 进行更新。

可按如下方式导出标识值和自动增量列:

  • 如果源和目标表都具有标识列并且配置参数 CopyFromVerticaWithIdentity 设置为 true (1),则无需列出它们。

  • 如果源表有标识列,而目标表没有,则必须显式列出源列和目标列。

默认情况下,EXPORT TO VERTICA 导出所有标识列。要全局禁用此行为,请设置 CopyFromVerticaWithIdentity 配置参数。