请注意:虽然我在这个问题中提到了Java/JDBC,但它严格来说是一个关于解决红移问题的问题,并且与语言/框架无关!!!
还有一份SSCCE回购协议完美再现了悬而未决的问题:https://github.com/bitbythecron/redshift-copy-troubleshooting
我试图从Java代码(使用Postgres JDBC驱动程序)运行以下红移复制命令:
COPY my_schema.mytable
FROM 's3://com.example.mybucket/mydata.csv/part-00000-bc1b179d-b4c1-459f-8f5e-8fe361d4b40f-c000.csv'
iam_role 'arn:aws:iam::blah:role/MyRedshiftRole'
csv;
如果我没看错文档,这应该是:
当我在我的红移UI客户端(SqlWorkbenchJ)中运行这个命令时,它会正确执行并在几秒钟内运行。但是,当我执行以下JDBC代码(使用完全相同的连接URL、凭据等)时,代码只是挂在executeUpdate
命令上:
Connection conn = null;
Statement statement = null;
try {
Class.forName("org.postgresql.Driver");
Properties props = new Properties();
props.setProperty("user", redshiftInfo.username);
props.setProperty("password", redshiftInfo.password);
log.info("\n\nAttempting to connect!\n\n");
conn = DriverManager.getConnection("jdbc:postgresql://<sameExactUrl_thatIUser_inSqlWorkbenchJ>", props);
log.info("\n\nConnection made!\n\n");
statement = conn.createStatement();
String command = "COPY my_schema.my_table FROM 's3://com.example.mybucket/mydata.csv/part-00000-bc1b179d-b4c1-459f-8f5e-8fe361d4b40f-c000.csv' iam_role 'arn:aws:iam::blah:role/MyRedshiftRole' csv";
log.info("\n\nExecuting...\n\n");
statement.executeUpdate(command);
log.info("\n\nHey I think it worked!!!\n\n");
statement.close();
conn.close();
} catch (Exception ex) {
log.info(ExceptionUtils.getStackTrace(ex));
}
当它运行时,我在日志中看到执行的
日志语句,但软件只是挂起。我已经等了30分钟,想看看它是不是因为某种原因变慢了。在这30分钟内(以及之后),我还刷新了SqlWorkbenchJ连接,并从我的_模式中运行了
SELECT COUNT(*)。我的_表
且计数始终为0。因此,它建立了连接,但实际上什么都没有被复制,或者如果是,它没有被提交。
我想看看红移方面发生了什么:是否有任何表格或日志(在AWS控制台或其他地方)我可以跟踪或检查,看看记录是否真的被复制和转移到了某个地方,或者从红移的角度看是否有任何错误被抛出报告?
问题是,我运行下面的代码,同时也从SqlWorkbenJ连接到我的红移集群(两者都运行在同一台笔记本电脑上)。当我断开我的SqlWorkbenJ会话并重新运行我的代码时,它不会挂起。
您的Java代码没有问题。如果记录的数量更少,它就非常好。
create table my_table (
c_name varchar(25) not null,
c_address varchar(25) not null,
c_city varchar(25) not null);
创建一个包含数据的CSV#并将其放入S3,只包含2-3条记录,
one,two,three
example1,example2,example3
然后,运行你的代码,它将跟随输出。
Attempting to connect!
Connection made!
Executing...
Hey I think it worked!!!
现在,做吧
Select * from my_table;
c_name | c_address | c_city
----------+-----------+----------
one | two | three
example1 | example2 | example3
回到你的问题,为什么你看到0记录在选择*从my_table;
事实:亚马逊红移是完全酸性投诉,意味着直到您的复制命令完成并提交,因此,您将不会在SELECT中看到任何记录。
解决方案:您希望看到,您的查询发生了什么,是否被执行或终止?
您可以运行以下命令来查看所有当前正在运行的查询。
select pid, user_name, starttime, query from stv_recents where status='Running';
//OR
select query, pid, elapsed, substring from svl_qlog where userid = 100 order by starttime desc limit 5;
有关更多详细信息,请参阅AWS红移系统查询留档。
初始设置 在创建并启动新的 Serene 应用程序之后,不能显示登录页,而当你打开浏览器控制台,却得到一条错误消息:找不到 Template.LoginPanel: 你可能使用了无效的解决方案名称,如 MyProject.Something (包含点’.’)。 当项目以这种方式命名时,模板系统将不能定位模板。 请不要在解决方案名称中使用点符号(’.’),如果必须使用点符号,可在创建解决方案之后再重
当使用 Gradle 时, 你肯定会碰到许多问题. 解决遇到的问题 如果你碰到了问题, 首先要确定你使用的是最新版本的 Gradle. 我们会经常发布新版本, 解决一些 bug 并加入新的功能. 所以你遇到的问题可能就在新版本里解决了. 如果你正在使用 Gradle Daemon, 先暂时关闭 daemon (你可以使用 switch —no-daemon 命令). 在第19章我们可以了解到更多关
在Debian和Ubuntu上,当您安装标准的FreeRADIUS软件包时,FreeRADIUS服务器二进制文件称为freeradius而不是radiusd。 您可以创建将使用较慢服务器的ldap模块的命名实例。 然后,您可以使用冗余部分替换authorize部分中的ldap条目,该冗余部分首先使用快速LDAP服务器列出模块,然后使用较慢的部分使用ldap模块实例。 #ldap redundant
Mount 5 Error mount 5 错误通常是 MDS 服务器滞后或崩溃导致的。要确保至少有一个 MDS 是启动且运行的,集群也要处于 active+healthy 状态。 Mount 12 Error mount 12 错误显示 cannot allocate memory ,常见于 Ceph 客户端和 Ceph 存储集群版本不匹配。用以下命令检查版本: ceph -v 如果 Ceph
从 Vert.x 3.4.0 开始,Vert.x 已经弃用 JGoups 实现,已经由 [infinispan]|(/clustering/Infinispan.md) 。不建议在生产或测试环境中使用 JGroups Cluster Manager 在构建工具中添加依赖即可: Maven(pom.xml) <dependency> <groupId>io.vertx</groupId> <
如果 Flarum 没有按照预期那样安装或工作,您 首先应该检查 服务器环境是否符合 系统要求。如果您缺少一些 Flarum 运行所需的东西,请先补全内容。 然后,请花几分钟时间搜索 支持论坛和 问题跟踪器,有可能该问题已被报告,并且有了解决办法。如果您彻底搜索后,仍然没有找到任何有用的信息,那么就可以开始排查故障了。 在继续前,您应当启用 Flarum 的调试模式。用文本编辑器打开 config