【问题标题】:Does redshift store failed queries?redshift 是否存储失败的查询?
【发布时间】:2020-05-21 07:58:18
【问题描述】:

我希望分析在某些 redshift 仓库(不是我的)上执行的查询。 为了做到这一点,我使用了一个在 stl_querytext 和 stl_query 上连接的查询。

我的问题是我为什么还会收到非法查询(使用错误 sql 语法的 I.E 查询)? 当我在当地的红移中尝试过时,我还没有看到那些。另外,找不到相关文档。

这是配置问题吗?如果我应该进行这些查询,有没有办法知道那些是非法的?

谢谢, 尼尔。

【问题讨论】:

  • 不知道可以用SVL_QUERY_METRICS_SUMMARY - Amazon Redshift判断查询是否失败?
  • @JohnRotenstein - 嗯,这里看不到查询是否成功完成的任何指示。
  • 正确,但您也许可以使用一些统计数据(例如行数)来假设它是否成功。
  • 好吧,这听起来不太确定...

标签: sql amazon-redshift


【解决方案1】:

因此 stl_querytext 将长查询分成由序列号标识的部分。作为第一步,我希望您将这些部分重建为原始查询。这可以使用 listagg() 函数来完成,只要结果查询不超过 max tex 字段(大约 320 个部分)。

现在这还不足以在所有情况下都返回有效的 SQL,因为您需要根据查询的部分是在查询中的文本字符串内部还是外部,对组合部分进行不同的处理。 (部件之间是否需要空白)

我已经完成了很多这个确切的过程,所以这是可行的。我在空白问题上没有完美的过程,我接近了。也许其他人知道从 stl_querytext 获得查询的精确再现的表达式。

【讨论】:

  • 感谢@Bill。我正在使用序列和 listagg 重建查询。在我个人的红移中,它适用于这些场景。但是,在客户帐户中,我们似乎也收到了非法查询。所以我主要想知道表本身存储了什么。
  • 表 (stl_querytext) 会将查询中的换行符存储为 '\n'(2 个字符)。这些字符需要被替换,当这些字符发生在字符串之外时,它们可以被任何空白字符替换。如果换行符在字符串中,您将希望保留这些换行符。因此需要一个 regexp_replace 来进行此更改。 regexp_replace(text,'\\\\n*',chr(10)) 对我有用。另外,在您的 listagg 中,使用什么字符(如果有)将字符串连接在一起?在此处插入字符也可能会导致失败。
猜你喜欢
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多