将数据从 Amazon redshift 卸载到 Amazon s3
Posted
技术标签:
【中文标题】将数据从 Amazon redshift 卸载到 Amazon s3【英文标题】:Unloading data from Amazon redshift to Amazon s3 【发布时间】:2018-09-02 15:21:55 【问题描述】:我正在尝试使用以下代码将数据卸载到 S3 存储桶中。哪个有效,但卸载后会引发一些错误。
Properties props = new Properties();
props.setProperty("user", MasterUsername);
props.setProperty("password", MasterUserPassword);
conn = DriverManager.getConnection(dbURL, props);
stmt = conn.createStatement();
String sql;
sql = "unload('select * from part where p_partkey in (select p_partkey from
part limit 10)') to"
+ " 's3://redshiftdump.****' "
+ " DELIMITER AS ','"
+ "ADDQUOTES "
+ "NULL AS ''"
+ "credentials 'aws_access_key_id=****;aws_secret_access_key=***' "
+ "parallel off" +
";";
boolean i = stmt.execute(sql);
stmt.close();
conn.close();
卸货工作。它正在桶中创建一个文件。但它给了我一些错误
java.sql.SQLException:
dataengine.impl.DSISimpleRowCountResult cannot be cast to
com.amazon.dsi.dataengine.interfaces.IResultSet
at
com.amazon.redshift.core.jdbc42.PGJDBC42Statement.createResultSet(Unknown
Source)
at com.amazon.jdbc.common.SStatement.executeQuery(Unknown Source)
这个错误是什么以及如何避免它?有没有办法以 CSV 格式转储表格。现在它正在以 FILE 格式转储文件。
【问题讨论】:
我得到了这个工作。使用 executeupdate 执行查询。但它是以 FILE 格式而不是 CSV 格式上传文件。 “文件格式”是什么意思?字段是否用逗号分隔? 您将文件命名为什么?是不是像 myfilename.csv 这样的东西? @theDbGuy 是的,会是 myfilename.csv 吗? 不要在末尾添加.csv。它可以正常工作 【参考方案1】:您说 UNLOAD 有效,但您收到此错误,这表明您连接成功,但查询完成时您的代码与 JDBC 驱动程序交互的方式存在问题。
我们在"Connect to Your Cluster Programmatically" 页面上提供了一个可能对我们的文档有所帮助的示例
关于输出文件格式,您将获得 UNLOAD SQL 中指定的任何内容,但文件名将有一个后缀(例如“000”或“6411_part_00”)以指示它是 UNLOAD 的哪一部分。
【讨论】:
您能否澄清您所说的“(例如“000”或“6411_part_00”)以指示它是UNLOAD 的哪一部分。”?我也得到不同的后缀,不确定它们的含义。也找不到任何文档。【参考方案2】:use executeUpdate .
def runQuery(sql: String) =
Class.forName("com.amazon.redshift.jdbc.Driver")
val connection = DriverManager.getConnection(url, username, password)
var statement: Statement = null
try
statement = connection.createStatement()
statement.setQueryTimeout(redshiftTimeoutInSeconds)
val result = statement.executeUpdate(sql)
logger.info(s"statement response code : $result")
catch
case e: Exception =>
logger.error(s"statement.isCloseOnCompletion :$e.getMessage ::: $e.printStackTrace()")
throw new IngestionException(e.getMessage)
finally
if(statement != null ) statement.close()
connection.close()
【讨论】:
以上是关于将数据从 Amazon redshift 卸载到 Amazon s3的主要内容,如果未能解决你的问题,请参考以下文章
Amazon Redshift - 卸载到 S3 - 动态 S3 文件名
将数据从 Amazon Redshift 迁移到 DynamoDB
将数据从 Amazon S3 复制到 Redshift 并避免重复行
将数据从 sql server 增量上传到 Amazon Redshift [关闭]
将数据从 firebase 加载到 amazon redshift
psycopg2/python 将数据从 postgresql 复制到 Amazon RedShift(postgresql)