当前位置: 首页 > 知识库问答 >
问题:

AWS红移上的COPY错误故障排除

桂志新
2023-03-14

请注意:虽然我在这个问题中提到了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;

如果我没看错文档,这应该是:

  1. 读取存储在S3上的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控制台或其他地方)我可以跟踪或检查,看看记录是否真的被复制和转移到了某个地方,或者从红移的角度看是否有任何错误被抛出报告?


共有2个答案

巩光誉
2023-03-14

问题是,我运行下面的代码,同时也从SqlWorkbenJ连接到我的红移集群(两者都运行在同一台笔记本电脑上)。当我断开我的SqlWorkbenJ会话并重新运行我的代码时,它不会挂起。

商华藏
2023-03-14

您的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