vertica JDBC API 之 VerticaCopyStream

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

VerticaCopyStream类(有关该类的详细信息可在JDBC文档中找到)允许您将数据从客户机系统传输到Vertica数据库。它允许直接使用SQL COPY语句,而不必首先将数据复制到数据库集群中的主机。使用复制命令从主机加载数据需要超级用户特权才能访问主机的文件系统。用于从流中加载数据的COPY语句不需要超级用户特权,因此您的客户端可以使用在将要接收的表上具有INSERT特权的任何用户帐户进行连接。

适用场景: 从数据文件或者inputStream中,批量copy数据到vertica。copy语句可以设置AUTO 、DIRECT、TRICKLE。具体参见COPY Parameters

将流复制到数据库中:

  1. 禁用数据库连接自动提交连接参数。
  2. 实例化一个VerticaCopyStream Object,至少向它传递数据库连接对象和一个包含用于加载数据的COPY语句的字符串。此语句必须将数据从STDIN复制到表中。您可以使用任何适合于数据加载的参数。
  3. 调用VerticaCopyStreamObject.start()启动COPY语句,并开始将数据流放到已经添加到VerticaCopyStreamObject中的任何流中。
  4. 调用VerticaCopyStreamObject.addStream()将附加流添加到要发送到数据库的流列表中。然后可以调用VerticaCopyStreamObject.execute()将它们传输到服务器。
  5. 可选地,调用VerticaCopyStreamObject.getRejects()从最后一个.execute()调用获得被拒绝的行列表。被拒绝列表通过每次调用.execute()或.finish()重新设置。
  6. 当您完成添加流时,调用VerticaCopyStreamObject.finish()将剩余的流发送到数据库并关闭COPY语句。
  7. 调用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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值