在“stl_load_errors”中找到的表ID与已加载的表不对应。

0

【以下的问题经过翻译处理】 我使用COPY查询将数据从S3加载到Redshift表t1中。

99%的情况下,没有错误,数据正确地被加载。因此,我知道加载的表名没有错误。

但是,当有错误发生时,根据我加载的表,我并不总是能够正确地追踪到发生在特定表加载期间的错误,因为对于一些已加载的表(如t1),在stl_load_errors中发现的表标识符tbl并不对应于表t1所期望的标识符。

加载的表名不会出现在此表中,而是在列tbl中得到一个整数标识符1234567。我们必须与另一个包含名称和标识符的表stv_tbl_perm联接以获取名称。这个“技巧”在Redshift文档中有展示。

对于一些表,如t1,我可能会在使用COPY t1 ...后在stl_load_errors中找到一个标识符为1234567的错误行,但在stv_tbl_perm中没有找到任何匹配项,就像它是临时表的标识符一样。

然后,当我在stv_tbl_perm中查找"name"='t1'时,我确实在id列中找到了一个标识符10111213,但它并不是我在stl_load_errors中看到的那个标识符。

更令人困惑的是,我的筛选错误文件和表的方法对于某些Redshift表非常有效,找到的ID是预期的,与stv_tbl_perm中的正确名称匹配。

为什么我的COPY到某些表格似乎会经过一个临时表,而另一些表则不是?

有没有办法即使ID不匹配也能将错误链接到正确的表格?

您可以在 3 天前我在 Stackoverflow(允许现代格式化)上发表的类似帖子中找到代码来(也许)重现我的错误,但尚未得到任何解决方案:https://stackoverflow.com/questions/55480847/amazon-redshift-how-to-associate-stl-load-errors-row-with-the-correct-table-n

profile picture
专家
已提问 5 个月前23 查看次数
1 回答
0

【以下的回答经过翻译处理】 好的,谢谢你的反馈。我们已经找到了问题的源头,并将进行修复调查。在修复后,我们将在论坛顶部的常规维护公告中发布说明。

这与我们最近引入的自动DISTSTYLE功能相关。对于当前为ALL的DISTSTYLE AUTO表,我们会将新数据加载到临时表中,然后检查新增行是否需要将表从ALL转换为EVEN。 https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html DISTSTYLE { AUTO | EVEN | KEY | ALL } The default is AUTO. … 自动:Amazon Redshift 根据表数据分配最佳分布方式。例如,如果指定了 AUTO 分布样式,Amazon Redshift 最初会将所有分布分配给一个小表,然后在表变大时将该表更改为均匀分布。分布的变化在几秒钟内在后台发生。... 有两种处理方法:

  1. 在加载的表上定义明确的EVEN、KEY或ALL分布。我主要建议将此选项用于可以使用KEY分布的表。如果没有使用KEY,那么AUTO分布将是最有效的。
  2. 从stl_load_errors中检索查询ID,从stl_querytext中检索查询的SQL,然后从pg_class、svv_table_info或stv_tbl_perm中按名称查找表。
profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则