由于内部错误,不支持相关子查询模式的类型

Posted

技术标签:

【中文标题】由于内部错误,不支持相关子查询模式的类型【英文标题】:type of correlated subquery pattern is not supported due to internal error 【发布时间】:2018-05-28 07:32:28 【问题描述】:

我遇到了这个错误:

"不支持这种类型的关联子查询模式,因为 内部错误”

在 Matillion(Redshift 的 ETL 工具)上执行以下查询时。

SELECT DISTINCT
  "sap"."tracking_no" AS "tracking_no",
  (select case when len("sap"."order_create_time")=6 and
                 regexp_instr("sap"."order_create_date",'[a-zA-Z]')=0 and 
                 regexp_instr("sap"."order_create_time",'[a-zA-Z]')=0
            then CAST(CONCAT(CONCAT(cast(isnull("sap"."order_create_date",'1900-01-01') as VARCHAR(10)), ' '),
                   CONCAT(CONCAT(CONCAT(CONCAT(SUBSTRING(isnull("sap"."order_create_time",'000000'), 1,2), ':'),
                   SUBSTRING(isnull("sap"."order_create_time",'000000'), 3,2)),':'),
                   SUBSTRING(isnull("sap"."order_create_time",'000000'), 5,2))) as timestamp)
            when len("sap"."order_create_time")=5 and regexp_instr("sap"."order_create_date",'[a-zA-Z]')=0 and 
                 regexp_instr("sap"."order_create_time",'[a-zA-Z]')=0
            then  CAST(CONCAT(CONCAT(cast(isnull("sap"."order_create_date",'1900-01-01') as VARCHAR(10)), ' '),
                       CONCAT(CONCAT(CONCAT(CONCAT(concat('0',SUBSTRING(isnull("sap"."order_create_time",'000000'), 5,1)), ':'),
                       SUBSTRING(isnull("sap"."order_create_time",'000000'), 3,2)),':'),
                       SUBSTRING(isnull("sap"."order_create_time",'000000'), 5,1))) as timestamp)
            else cast('1900-01-01 000000' as timestamp)
   end)  as "order_date_time",
   (select case when len("sap"."ship_time")=6 and
                 regexp_instr("sap"."ship_date",'[a-zA-Z]')=0 and 
                 regexp_instr("sap"."ship_time",'[a-zA-Z]')=0
            then CAST(CONCAT(CONCAT(cast(isnull("sap"."ship_date",'1900-01-01') as VARCHAR(10)), ' '),
                   CONCAT(CONCAT(CONCAT(CONCAT(SUBSTRING(isnull("sap"."ship_time",'000000'), 1,2), ':'),
                   SUBSTRING(isnull("sap"."ship_time",'000000'), 3,2)),':'),
                   SUBSTRING(isnull("sap"."ship_time",'000000'), 5,2))) as timestamp)
            when len("sap"."ship_time")=5 and regexp_instr("sap"."ship_date",'[a-zA-Z]')=0 and 
                 regexp_instr("sap"."ship_time",'[a-zA-Z]')=0
            then  CAST(CONCAT(CONCAT(cast(isnull("sap"."ship_date",'1900-01-01') as VARCHAR(10)), ' '),
                       CONCAT(CONCAT(CONCAT(CONCAT(concat('0',SUBSTRING(isnull("sap"."ship_time",'000000'), 5,1)), ':'),
                       SUBSTRING(isnull("sap"."ship_time",'000000'), 3,2)),':'),
                       SUBSTRING(isnull("sap"."ship_time",'000000'), 5,1))) as timestamp)
            else cast('1900-01-01 000000' as timestamp)
end)  as "ship_date_time",
  "fedex"."TRACKING_NUMBER" AS "TRACKING_NUMBER"      
FROM fed_ex_feed AS "fedex"
     LEFT OUTER JOIN     
     sap_delivery AS "sap" 
     ON "fedex"."TRACKING_NUMBER" = "sap"."tracking_no"
WHERE sap.order_create_date is not null and
      fedex.DELIVERY_DATE is not null

我尝试搜索分辨率,但在互联网上找不到任何分辨率。

这是否与 redshift 集群有关,因为它暗示为内部错误?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我特此发布更新后的查询,该查询现在有效。去掉case前面的select语句就可以了。

SELECT DISTINCT
  "sap"."tracking_no" AS "tracking_no",
   case when len("sap"."order_create_time")=6 and
                 regexp_instr("sap"."order_create_date",'[a-zA-Z]')=0 and 
                 regexp_instr("sap"."order_create_time",'[a-zA-Z]')=0
            then CAST(CONCAT(CONCAT(cast(isnull("sap"."order_create_date",'1900-01-01') as VARCHAR(10)), ' '),
                   CONCAT(CONCAT(CONCAT(CONCAT(SUBSTRING(isnull("sap"."order_create_time",'000000'), 1,2), ':'),
                   SUBSTRING(isnull("sap"."order_create_time",'000000'), 3,2)),':'),
                   SUBSTRING(isnull("sap"."order_create_time",'000000'), 5,2))) as timestamp)
            when len("sap"."order_create_time")=5 and regexp_instr("sap"."order_create_date",'[a-zA-Z]')=0 and 
                 regexp_instr("sap"."order_create_time",'[a-zA-Z]')=0
            then  CAST(CONCAT(CONCAT(cast(isnull("sap"."order_create_date",'1900-01-01') as VARCHAR(10)), ' '),
                       CONCAT(CONCAT(CONCAT(CONCAT(concat('0',SUBSTRING(isnull("sap"."order_create_time",'000000'), 5,1)), ':'),
                       SUBSTRING(isnull("sap"."order_create_time",'000000'), 3,2)),':'),
                       SUBSTRING(isnull("sap"."order_create_time",'000000'), 5,1))) as timestamp)
            else cast('1900-01-01 000000' as timestamp)
   end  as "order_date_time"
   , case when len("sap"."ship_time")=6 and
                 regexp_instr("sap"."ship_date",'[a-zA-Z]')=0 and 
                 regexp_instr("sap"."ship_time",'[a-zA-Z]')=0
            then CAST(CONCAT(CONCAT(cast(isnull("sap"."ship_date",'1900-01-01') as VARCHAR(10)), ' '),
                   CONCAT(CONCAT(CONCAT(CONCAT(SUBSTRING(isnull("sap"."ship_time",'000000'), 1,2), ':'),
                   SUBSTRING(isnull("sap"."ship_time",'000000'), 3,2)),':'),
                   SUBSTRING(isnull("sap"."ship_time",'000000'), 5,2))) as timestamp)
            when len("sap"."ship_time")=5 and regexp_instr("sap"."ship_date",'[a-zA-Z]')=0 and 
                 regexp_instr("sap"."ship_time",'[a-zA-Z]')=0
            then  CAST(CONCAT(CONCAT(cast(isnull("sap"."ship_date",'1900-01-01') as VARCHAR(10)), ' '),
                       CONCAT(CONCAT(CONCAT(CONCAT(concat('0',SUBSTRING(isnull("sap"."ship_time",'000000'), 5,1)), ':'),
                       SUBSTRING(isnull("sap"."ship_time",'000000'), 3,2)),':'),
                       SUBSTRING(isnull("sap"."ship_time",'000000'), 5,1))) as timestamp)
            else cast('1900-01-01 000000' as timestamp)
end  as "ship_date_time",
  "fedex"."TRACKING_NUMBER" AS "TRACKING_NUMBER"      
FROM fed_ex_feed AS "fedex"
     LEFT OUTER JOIN     
     sap_delivery AS "sap" 
     ON "fedex"."TRACKING_NUMBER" = "sap"."tracking_no"
WHERE sap.order_create_date is not null and
      fedex.DELIVERY_DATE is not null

【讨论】:

以上是关于由于内部错误,不支持相关子查询模式的类型的主要内容,如果未能解决你的问题,请参考以下文章

子查询失败:由于内部错误,不支持此类关联子查询模式;

Redshift 中的 DAU WAU MAU 错误:[Amazon](500310) 无效操作:由于内部错误,不支持此类关联子查询模式;

Oracle 到 Redshift 查询

重写相关子查询,Redshift 抛出这种类型的相关子查询模式尚不支持错误

使用 case when 时出现 SQL (Redshift) 错误 - 不支持这种类型的相关子查询模式

Redshift 相关子查询内部错误