Liu Zhao created KYLIN-5359:
-------------------------------

             Summary: Kylin4 replace function expression convert error
                 Key: KYLIN-5359
                 URL: https://issues.apache.org/jira/browse/KYLIN-5359
             Project: Kylin
          Issue Type: Bug
          Components: Query Engine
    Affects Versions: v4.0.2, v4.0.1
            Reporter: Liu Zhao
         Attachments: image-2022-12-12-11-25-32-037.png, 
image-2022-12-12-11-25-41-178.png

查询语句形如:select name, replace(name, substring(name, 1, 1), '--') as new_name from 
LZ_TEST_YUFA 执行出错
errorMsg:java.lang.ClassCastException: org.apache.spark.sql.Column cannot be 
cast to java.lang.String while executing SQL: "select * from (select name, 
replace(name, substring(name, 1, 1), '--') as new_name from LZ_TEST_YUFA) limit 
50000

原因:在ExpressionConverter中subtring返回的是一个column对象,而在replace转换中强制将函数参数转换为string


{code:java}
// ExpressionConverter
case "replace " =>
        regexp_replace(k_lit(children.head),
          {color:red}children.apply(1).asInstanceOf[String],
          children.apply(2).asInstanceOf[String]{color})
case "substring" | "substr" =>
        if (children.length == 3) { //substr(str1,startPos,length)
         {color:red} k_lit(children.head)
                .substr(k_lit(children.apply(1)), 
k_lit(children.apply(2))){color}
        } else if (children.length == 2) { //substr(str1,startPos)
          k_lit(children.head).
                substr(k_lit(children.apply(1)), k_lit(Int.MaxValue))
        } else {
          throw new UnsupportedOperationException(
                s"substring must provide three or two parameters under sparder")
        }
case "initcapb" =>
        initcap(k_lit(children.head))
{code}

 !image-2022-12-12-11-25-32-037.png! 
 !image-2022-12-12-11-25-41-178.png! 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to