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 应该始终是多语句查询中的第一条语句。另外,不要在同一个查询中多次使用它。
注意
在 Windows 客户端上,由于 Windows API 中存在的限制,您为 COPY LOCAL 文件提供的路径将限制为 216 个字符。COPY LOCAL
即使发生异常,也不会自动创建异常和拒绝文件。
特权
用户必须具有表的 INSERT 权限以及架构的 USAGE 权限。
Copy Local 的工作原理
COPY LOCAL 通过平台中性的方式加载数据。COPY LOCAL 语句将本地客户端系统中的所有文件加载到 Vertica 主机(服务器会在其中处理文件)。您可以复制各种格式的文件:已解压缩、已压缩、固定宽度格式、bzip 或 gzip 格式或者指定为 bash glob。单个格式(例如全部为 bzip 或 gzip)的文件可以是以逗号分隔的输入文件列表。此外,还可以使用任何适用的 COPY 语句选项(只要数据格式支持该选项即可)。例如,可以定义特定的分隔符,或者定义如何处理 NULL 值等等。
注意
Linuxglob
命令会返回与输入的模式(在适用于 Glob 的 Linux 手册页面 (7) 中指定)匹配的文件。对于 ADO.net 平台,按照 .NET Directory.getFiles 方法中的描述指定模式和通配符。
有关使用 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)