You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by jy l <lj...@gmail.com> on 2021/01/12 10:04:21 UTC

FlinkSQL Filter Error With Float Column on flink-1.12.0

Hi:
Flink SQL filter data throw an exception,
code:
def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val source = env.fromElements(
      (1.0f, 11.0f, 12.0f),
      (2.0f, 21.0f, 22.0f),
      (3.0f, 31.0f, 32.0f),
      (4.0f, 41.0f, 42.0f),
      (5.0f, 51.0f, 52.0f)
    )
    val settings = EnvironmentSettings.newInstance()
        .inStreamingMode()
        .useBlinkPlanner()
        .build()
    val tEnv = StreamTableEnvironment.create(env, settings)
    tEnv.createTemporaryView("myTable", source, $("id"), $("f1"), $("f2"))
    val query =
      """
        |select * from myTable where id in (1.0, 2.0, 3.0)
        |""".stripMargin
    tEnv.executeSql(query).print()
}

exception:
Exception in thread "main" java.lang.UnsupportedOperationException: class
org.apache.calcite.sql.type.SqlTypeName: FLOAT
at org.apache.calcite.util.Util.needToImplement(Util.java:1075)
at org.apache.calcite.rex.RexLiteral.appendAsJava(RexLiteral.java:703)
at org.apache.calcite.rex.RexLiteral.toJavaString(RexLiteral.java:408)
at org.apache.calcite.rex.RexLiteral.computeDigest(RexLiteral.java:276)
at org.apache.calcite.rex.RexLiteral.<init>(RexLiteral.java:223)
at org.apache.calcite.rex.RexLiteral.toLiteral(RexLiteral.java:737)
at org.apache.calcite.rex.RexLiteral.lambda$printSarg$4(RexLiteral.java:710)
at org.apache.calcite.util.RangeSets$Printer.singleton(RangeSets.java:397)
at org.apache.calcite.util.RangeSets.forEach(RangeSets.java:237)
at org.apache.calcite.util.Sarg.lambda$printTo$0(Sarg.java:110)
at org.apache.calcite.linq4j.Ord.forEach(Ord.java:157)
at org.apache.calcite.util.Sarg.printTo(Sarg.java:106)
at org.apache.calcite.rex.RexLiteral.printSarg(RexLiteral.java:709)
at
org.apache.calcite.rex.RexLiteral.lambda$appendAsJava$1(RexLiteral.java:652)
at org.apache.calcite.util.Util.asStringBuilder(Util.java:2502)

Why is that? How do i need to solve it?

thanks.

Re: FlinkSQL Filter Error With Float Column on flink-1.12.0

Posted by Evan <ch...@foxmail.com>.
你好,在数据库中,Float类型存的是个近似值,不能用类似于 = 或者 != 的比较语句,所以也不支持IN操作
希望能帮助到你 



 
From: jy l
Date: 2021-01-12 18:04
To: user-zh
Subject: FlinkSQL Filter Error With Float Column on flink-1.12.0
Hi:
Flink SQL filter data throw an exception,
code:
def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val source = env.fromElements(
      (1.0f, 11.0f, 12.0f),
      (2.0f, 21.0f, 22.0f),
      (3.0f, 31.0f, 32.0f),
      (4.0f, 41.0f, 42.0f),
      (5.0f, 51.0f, 52.0f)
    )
    val settings = EnvironmentSettings.newInstance()
        .inStreamingMode()
        .useBlinkPlanner()
        .build()
    val tEnv = StreamTableEnvironment.create(env, settings)
    tEnv.createTemporaryView("myTable", source, $("id"), $("f1"), $("f2"))
    val query =
      """
        |select * from myTable where id in (1.0, 2.0, 3.0)
        |""".stripMargin
    tEnv.executeSql(query).print()
}
 
exception:
Exception in thread "main" java.lang.UnsupportedOperationException: class
org.apache.calcite.sql.type.SqlTypeName: FLOAT
at org.apache.calcite.util.Util.needToImplement(Util.java:1075)
at org.apache.calcite.rex.RexLiteral.appendAsJava(RexLiteral.java:703)
at org.apache.calcite.rex.RexLiteral.toJavaString(RexLiteral.java:408)
at org.apache.calcite.rex.RexLiteral.computeDigest(RexLiteral.java:276)
at org.apache.calcite.rex.RexLiteral.<init>(RexLiteral.java:223)
at org.apache.calcite.rex.RexLiteral.toLiteral(RexLiteral.java:737)
at org.apache.calcite.rex.RexLiteral.lambda$printSarg$4(RexLiteral.java:710)
at org.apache.calcite.util.RangeSets$Printer.singleton(RangeSets.java:397)
at org.apache.calcite.util.RangeSets.forEach(RangeSets.java:237)
at org.apache.calcite.util.Sarg.lambda$printTo$0(Sarg.java:110)
at org.apache.calcite.linq4j.Ord.forEach(Ord.java:157)
at org.apache.calcite.util.Sarg.printTo(Sarg.java:106)
at org.apache.calcite.rex.RexLiteral.printSarg(RexLiteral.java:709)
at
org.apache.calcite.rex.RexLiteral.lambda$appendAsJava$1(RexLiteral.java:652)
at org.apache.calcite.util.Util.asStringBuilder(Util.java:2502)
 
Why is that? How do i need to solve it?
 
thanks.