COPY LOCAL

将 COPY 语句与其 LOCAL 选项配合使用,可以在客户端系统而不是群集主机上加载数据文件。COPY LOCAL 支持 STDIN'pathToData' 参数,但是不支持 [ON nodename] 子句。COPY LOCAL 不支持具有 NATIVE 或 NATIVE VARCHAR 格式的多个文件批量。COPY LOCAL 不支持读取 ORC 或 Parquet 文件;改用 ON NODE。COPY LOCAL 不支持 CURRENT_LOAD_SOURCE()。

COPY LOCAL 选项与平台无关。该语句在所有受支持的 Vertica 平台和驱动程序中的工作方式均相同。有关支持的驱动程序的更多详细信息,请参阅客户端驱动程序

COPY LOCAL 必须是您使用 ODBC 客户端库进行的任何多语句查询中的第一条语句。将其用作第二个或以后的语句会导致错误。在使用其他客户端库(例如 JDBC)时,COPY LOCAL 应该始终是多语句查询中的第一条语句。另外,不要在同一个查询中多次使用它。

COPY LOCAL 即使发生异常,也不会自动创建异常和拒绝文件。

特权

用户必须具有表的 INSERT 权限以及架构的 USAGE 权限。

Copy Local 的工作原理

COPY LOCAL 通过平台中性的方式加载数据。COPY LOCAL 语句将本地客户端系统中的所有文件加载到 Vertica 主机(服务器会在其中处理文件)。您可以复制各种格式的文件:已解压缩、已压缩、固定宽度格式、bzip 或 gzip 格式或者指定为 bash glob。单个格式(例如全部为 bzip 或 gzip)的文件可以是以逗号分隔的输入文件列表。此外,还可以使用任何适用的 COPY 语句选项(只要数据格式支持该选项即可)。例如,可以定义特定的分隔符,或者定义如何处理 NULL 值等等。

有关使用 COPY LOCAL 选项加载数据的详细信息,请参阅 COPY 以查看语法描述,参阅指定加载数据的位置以查看详细示例。

Vertica 主机会根据需要解压缩并处理文件,无论文件格式如何或从中加载文件的客户端平台如何。一旦服务器拥有复制的文件,Vertica 就会通过跨节点分发文件解析任务(例如编码、压缩、解压缩)来保持性能。

在查询计划中查看 Copy Local 操作

在使用 COPY LOCAL 选项时,GraphViz 查询计划包括用于 Load-Client-File 而不是 Load-File 的标签。以下是查询计划示例中的一部分:

-----------------------------------------------
  PLAN:  BASE BULKLOAD PLAN  (GraphViz Format)
-----------------------------------------------
 digraph G {
 graph [rankdir=BT, label = " BASE BULKLOAD PLAN \nAll Nodes Vector:
 \n\n  node[0]=initiator (initiator) Up\n", labelloc=t, labeljust=l ordering=out]
.
.
.
10[label = "Load-Client-File(/tmp/diff) \nOutBlk=[UncTuple]",
color = "green", shape = "ellipse"];

示例

以下示例显示了从本地文件的加载过程。

$ cat > t.dat
12
17
9
^C

=> CREATE TABLE numbers (value INT);
CREATE TABLE

=> COPY numbers FROM LOCAL 't.dat';
 Rows Loaded
-------------
           3
(1 row)

=> SELECT * FROM numbers;
 value
-------
    12
    17
     9
(3 rows)