我的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表。
答案 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
之一是:
将数据复制到Redshift的最有效方法是将其放在Amazon S3中,然后使用COPY
命令。这会在所有节点上执行并行加载,并支持GZIP格式(减少文件存储并加快加载速度)。