VerticaCopyStream类(有关该类的详细信息可在JDBC文档中找到)允许您将数据从客户机系统传输到Vertica数据库。它允许直接使用SQL COPY语句,而不必首先将数据复制到数据库集群中的主机。使用复制命令从主机加载数据需要超级用户特权才能访问主机的文件系统。用于从流中加载数据的COPY语句不需要超级用户特权,因此您的客户端可以使用在将要接收的表上具有INSERT特权的任何用户帐户进行连接。
适用场景: 从数据文件或者inputStream中,批量copy数据到vertica。copy语句可以设置AUTO 、DIRECT、TRICKLE。具体参见COPY Parameters
将流复制到数据库中:
- 禁用数据库连接自动提交连接参数。
- 实例化一个VerticaCopyStream Object,至少向它传递数据库连接对象和一个包含用于加载数据的COPY语句的字符串。此语句必须将数据从STDIN复制到表中。您可以使用任何适合于数据加载的参数。
- 调用VerticaCopyStreamObject.start()启动COPY语句,并开始将数据流放到已经添加到VerticaCopyStreamObject中的任何流中。
- 调用VerticaCopyStreamObject.addStream()将附加流添加到要发送到数据库的流列表中。然后可以调用VerticaCopyStreamObject.execute()将它们传输到服务器。
- 可选地,调用VerticaCopyStreamObject.getRejects()从最后一个.execute()调用获得被拒绝的行列表。被拒绝列表通过每次调用.execute()或.finish()重新设置。
- 当您完成添加流时,调用VerticaCopyStreamObject.finish()将剩余的流发送到数据库并关闭COPY语句。
- 调用Connection.commit()提交加载的数据。
getrejects()方法返回一个列表,其中包含在前面的.execute()方法调用之后被拒绝的行数。每次调用.execute()都会清除被拒绝的行列表,因此需要在每次调用.execute()之后调用. getrejects()。因为.start()和.finish()也调用.execute()来将任何挂起的流发送到服务器,所以您也应该在这些方法之后调用. getrejects()。
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import com.vertica.jdbc.VerticaConnection;
import com.vertica.jdbc.VerticaCopyStream;
public class CopyMultipleStreamsExample {
public static void main(String[] args) {
// Note: If running on Java 5, you need to call Class.forName
// to manually load the JDBC driver.
// Set up the properties of the connection
Properties myProp = new Properties(

VerticaCopyStream 类允许通过 JDBC 直接使用 SQL COPY 语句从客户端批量导入数据到 Vertica 数据库,无需超级用户权限。该方法提高了数据加载效率,支持 AUTO、DIRECT 和 TRICKLE 等 COPY 参数。文章介绍了如何禁用自动提交、创建 VerticaCopyStream 对象、添加数据流、处理拒绝行以及多节点并发加载以提升性能。实测显示,从 Oracle 导入 5000 条数据到 Vertica 单节点耗时仅 4 秒。
最低0.47元/天 解锁文章
860

被折叠的 条评论
为什么被折叠?



