使用java程序从STDIN进行Redshift复制

时间:2015-07-24 06:14:25

标签: postgresql amazon-redshift

我的Java程序在Postgres上运行正常,但在迁移到Redshift时,我希望这个Postgres程序在Redshift上运行。

在Postgres中我使用了以下类,我试图在Redshift中使用它。

import org.postgresql.copy.CopyIn;
import org.postgresql.copy.CopyManager;
import org.postgresql.core.BaseConnection;

following is the program snapshot :
Connection insertConnection = OpenDBConnection(prop);

CopyIn cpIN = null;  
CopyManager cm = new CopyManager((BaseConnection) insertConnection);
cpIN = cm.copyIn("COPY table_name (col1,col2) FROM STDIN WITH DELIMITER '|'");

but I'm getting following error:
  

java.lang.ClassCastException:com.amazon.redshift.jdbc41.S41NotifiedConnection无法强制转换为org.postgresql.core.BaseConnection

基本上,程序所做的是,它从db表中复制一些记录,它是STDIN,proram处理记录,过滤并复制到其他db表。

1 个答案:

答案 0 :(得分:5)

使用COPY...FROM STDIN

Amazon Redshift COPY documentation显示:

COPY table_name 
[ column_list ]
FROM data_source
[ WITH ] CREDENTIALS [AS] 'aws_access_credentials'
[ [ FORMAT ] [ AS ] data_format ] 
[ [ parameter [ argument ] [, ... ] ]

data_source之一是:

  • 来自Amazon S3的COPY
  • 来自Amazon EMR的COPY
  • 来自远程主机(SSH)的COPY
  • 来自Amazon DynamoDB的COPY

将数据复制到Redshift的最有效方法是将其放在Amazon S3中,然后使用COPY命令。这会在所有节点上执行并行加载,并支持GZIP格式(减少文件存储并加快加载速度)。