COPY FROM VERTICA
从其他 Vertica 数据库导入数据。COPY FROM VERTICA 类似于 COPY,但仅支持后者的一部分参数。
重要
源数据库的版本不得比目标数据库版本大一个主要版本 在目标数据库后面。语法
COPY [[database.]schema-name.]target-table
[( target‑columns )]
FROM VERTICA source‑database.[schema.]source‑table
[( source‑columns )]
[STREAM NAME 'stream name']
[NO COMMIT]
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
目标表
- 所导入数据的目标表。Vertica 将数据从架构表加载到包含列的全部投影中。
-
target‑columns
- target‑table 中列的逗号分隔列表,用于存储所复制的数据。请参阅下面的目标列和源列之间的映射。
您不能将 FILLER 列或复杂类型(原生数组除外)的列用作列定义的一部分。
-
source‑database
- 要导入的数据的源数据库。在启动复制操作之前,当前会话中必须已经存在与该数据库的连接;否则 Vertica 将返回错误。有关详细信息,请参阅
CONNECT TO VERTICA
。 -
[schema.]source‑table
- 作为导入数据来源的表。如果 schema 是除
public
以外的任何其他架构,则必须提供架构名称。 -
source‑columns
- 源表中要导入的列的逗号分隔列表。如果省略,则导出所有列。列不能属于复杂类型。请参阅下面的目标列和源列之间的映射。
STREAM NAME
- COPY 加载流标识符。使用流名称有助于快速识别特定加载。您在加载语句中指定的 STREAM NAME 值出现在 LOAD_STREAMS 系统表的
stream
列中。 NO COMMIT
- 防止
COPY
在完成复制数据时自动提交其事务。有关详细信息,请参阅使用事务暂存加载。
特权
-
源表:选择
-
源表架构: USAGE
-
目标表: INSERT
-
目标表架构: USAGE
目标列和源列之间的映射
将一个数据库中的所有表数据复制到另一个数据库时,如果两个表中的列定义都符合以下条件,COPY FROM VERTICA 可以不用指定列的列表:
-
列数相同
-
列名相同
-
列序列相同
-
列数据类型匹配或兼容
-
没有复杂的数据类型(ARRAY、SET 或 ROW),原生数组除外
如果其中任何一个条件不成立,则 COPY FROM VERTICA 语句必须包含列的列表,这些列表将目标列和源列显式映射到彼此,如下所示:
-
包含相同数量的列。
-
按相同顺序列出源列和目标列。
-
将具有相同(或兼容)数据类型的列配对。
执行 COPY 期间出现节点故障
请参阅处理复制/导出期间的节点故障。
示例
以下示例将整个表的内容从 vmart
数据库复制到当前数据库中具有相同定义的表中:
=> CONNECT TO VERTICA vmart USER dbadmin PASSWORD 'myPassword' ON 'VertTest01',5433;
CONNECT
=> COPY customer_dimension FROM VERTICA vmart.customer_dimension;
Rows Loaded
-------------
500000
(1 row)
=> DISCONNECT vmart;
DISCONNECT
有关更多示例,请参阅从另一个 Vertica 数据库复制数据。