amzon redshift ERROR: Intermediate result row exceeds database block size

amzon redshift ERROR: Intermediate result row exceeds database block size

当我们 运行 有大约 100 列的查询时,我们收到错误:,它超出了数据库块 size.please 告诉我一些解决方案。我们的集群有 4 个节点,有 dw2.large 台机器。

我 运行 有很多 VARCHAR (MAX) 列,因此我遇到了 issue.i 通过尽可能严格地限制 Varchar 来解决我的问题。如果您找到任何解决方案,请 post.

有同样的问题,因为 redshift 不支持枢轴,不得不使用大量的 CASE WHEN 来制作大约 100 列 varchar 数据类型,最近遇到第一个问题,快速修复是添加 ::varchar(1000 ) 或代替 1000 - 可能出现在该列中的最大字母数。为我解决了这个问题。

另外 - 这个解决方案只是一个快速修复,为了做得更好 - 考虑使用某种 ETL,也许 pandas 来进行旋转或初始操作。

如前所述 here 在处理包含长字符串或包含字符串操作结果的列时,经常会发生此错误。 在这种情况下,在处理字符串之后,对我有用的是指定字段可以包含的最大字符数。例如:

SELECT (...)
,MAX(CASE
    WHEN split_part(var1,'->', 2) = '' THEN NULL
    ELSE
        CASE
            WHEN (var2 LIKE 'pattern1%') THEN CONCAT('aaaa->', var1)
            WHEN (var2 LIKE 'pattern2%') THEN CONCAT('cccc->', var1) 
            ELSE split_part(var1,'->', 2) 
        END
END)::varchar(20) AS result_variable
FROM (...)

在这种情况下,我的变量可以包含的最大字符数是 20