使用 VerticaCopyStream
使用 VerticaCopyStream 类可以将数据从客户端系统流式传输到 Vertica 数据库。它允许您直接使用 COPY,而无需先将数据复制到数据库群集中的主机。使用 COPY 命令从主机加载数据时,需要拥有超级用户权限才能访问主机的文件系统。用于从流加载数据的 COPY 语句不需要超级用户权限,因此客户端可以使用对目标表拥有 INSERT 权限的任何用户帐户进行连接。
若要将流复制到数据库,请执行下列操作:
-
禁用数据库连接的 AutoCommit 连接参数。
-
将
VerticaCopyStreamObject
实例化,并至少向其传递数据库连接对象和包含用于加载数据的 COPY 语句的字符串。该语句必须将 STDIN 中的数据复制到表。您可以使用适用于数据加载的任何参数。注意
VerticaCopyStreamObject
构造函数可以选择使用单个InputStream
对象或InputStream
对象的List
。此选项可让您预填充要复制到数据库中的流的列表。 -
调用
VerticaCopyStreamObject.start()
,以启动 COPY 语句并开始以流式传输已添加到VerticaCopyStreamObject
的任何流中的数据。 -
调用
VerticaCopyStreamObject.addStream()
,以将其他流添加到要发送到数据库的流的列表。然后,可以调用VerticaCopyStreamObject.execute()
以将它们以流式传输到服务器。 -
(可选)调用
VerticaCopyStreamObject.getRejects()
以从上一次.execute()
调用获取拒绝的行的列表。对.execute()
或.finish()
的每次调用会重置拒绝列表。注意
如果在步骤 2 中传递到VerticaCopyStreamObject
对象的 COPY 语句中使用了 REJECTED DATA 或 EXCEPTIONS 选项,.getRejects()
将返回空列表。一次只能使用一种方法来跟踪拒绝的行。 -
完成添加流后,调用
VerticaCopyStreamObject.finish()
以将其余任何流发送到数据库并关闭 COPY 语句。 -
调用
Connection.commit()
以提交已加载的数据。
获取拒绝的行
VerticaCopyStreamObject.getRejects()
方法将返回一个列表,其中包含上一次 .execute()
方法调用之后拒绝的行的数量。对 .execute()
的每次调用会清除拒绝的行的列表,因此您需要在每次调用 .execute()
之后调用 .getRejects()
。由于 .start()
和 .finish()
也会调用 .execute()
以将任何挂起的流发送到服务器,因此您还应在调用这些方法之后调用 .getRejects()
。
以下示例演示了将存储在客户端系统上的五个文本文件的内容加载到表中。
对部分示例数据运行以上示例后,将生成以下输出:
Loading file: C:\Data\customers-1.txtNumber of rows rejected in load #1: 3
Rejected row #1 is row 3
Rejected row #2 is row 7
Rejected row #3 is row 51
Loading file: C:\Data\customers-2.txt
Number of rows rejected in load #2: 5Rejected row #1 is row 4143
Rejected row #2 is row 6132
Rejected row #3 is row 9998
Rejected row #4 is row 10000
Rejected row #5 is row 10050
Loading file: C:\Data\customers-3.txt
Number of rows rejected in load #3: 9
Rejected row #1 is row 14142
Rejected row #2 is row 16131
Rejected row #3 is row 19999
Rejected row #4 is row 20001
Rejected row #5 is row 20005
Rejected row #6 is row 20049
Rejected row #7 is row 20056
Rejected row #8 is row 20144
Rejected row #9 is row 20236
Loading file: C:\Data\customers-4.txt
Number of rows rejected in load #4: 8
Rejected row #1 is row 23774
Rejected row #2 is row 24141
Rejected row #3 is row 25906
Rejected row #4 is row 26130
Rejected row #5 is row 27317
Rejected row #6 is row 28121
Rejected row #7 is row 29321
Rejected row #8 is row 29998
Loading file: C:\Data\customers-5.txt
Number of rows rejected in load #5: 1
Rejected row #1 is row 39997
Finish returned 39995
Number of rows accepted: 39995
Total number of rows rejected: 26