Как сделать выбор поля из выбора * Flink - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь объединить 2 выбора.

Я должен сделать запрос в коде, похоже на этот запрос

select *
from  Data
where numPers > 10 && Object = P1

и это

select *
from  Data
where numPers < 20 && Object == P1

И мне нужно только метки времени из данных без повторов

Код программы, который я использую, показан ниже

object Prog {

  def main(args: Array[String]) : Unit = {
    org.apache.log4j.BasicConfigurator.configure()

    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val tableEnv = TableEnvironment.getTableEnvironment(env)

    val csvTableSource = CsvTableSource
      .builder
      .path("src/main/resources/data.stream")
      .field("numPers", Types.INT)
      .field("Object", Types.STRING)
      .field("TIMESTAMP", Types.STRING)
      .fieldDelimiter(",")
      .ignoreFirstLine
      .ignoreParseErrors
      .commentPrefix("%")
      .build()

    tableEnv.registerTableSource("Data", csvTableSource)

    val table = tableEnv.scan("Data") //this works
      .filter("numPers > 10")
      .select("*")


    val ds = tableEnv.toAppendStream(table, classOf[Row])

    ds.print()
    env.execute()
  }
}

Но как я могу добавить второй запрос к первому?

1 Ответ

0 голосов
/ 25 июня 2018

Если я правильно понимаю ваши требования, вам не нужно объединение, а просто предикат BETWEEN:

val query = "SELECT * FROM Data WHERE numPers BETWEEN 10 AND 20 AND Object = P1"
val table = tableEnv.sqlQuery(query)
...