java table类api_Flink的Table API

Table API是流处理和批处理通用的关系型API,Table API可以基于流输入或者批输入来运行而不需要进行任何修改。Table API是SQL语言的超集并专门为Apache Flink设计的,Table API是Scala 和Java语言集成式的API。与常规SQL语言中将查询指定为字符串不同,Table API查询是以Java或Scala中的语言嵌入样式来定义的,具有IDE支持如:自动完成和语法检测。

Table API与Flink的SQL集成共享许多其API的概念和部分,请参考通用的概念和API来了解如何注册table或者创建一个Table对象,Streaming Concepts页讨论了特殊的概念如:动态表和时间属性。

接下来的例子中假设注册了一个名叫Orders的表并有(a, b, c, rowtime)属性,rowtime字段可以是流中的逻辑时间字段或者是批中的常规时间戳字段。

概述和实例

Table API可以用于Scala和Java中,Scala Table API利用了Scala表达式,Java Table API则是基于字符串来的,字符串会被解析并转换成等价的表达式。

接下来的例子展示了Scala 和 Java Table API的不同之处,表程序是在批环境中执行的,它扫描Orders表,根据a字段来分组,并计算每个分组的结果,表程序的结果转换为一个Row类型的DataSet并打印出来。

Java Table API可以通过导入org.apache.flink.table.api.java.*来启用,下面的例子展示了Java Table API程序如何构建及表达式如何指定为字符串。

// 配置环境

ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

BatchTableEnvironment tEnv = TableEnvironment.getTableEnvironment(env);

// 在表环境中注册Orders表

// ...

// 指定一个表程序

Table orders = tEnv.scan("Orders"); // schema (a, b, c, rowtime)

Table counts = orders

.groupBy("a")

.select("a, b.count as cnt");

// 结果转换为 DataSet

DataSet result = tableEnv.toDataSet(counts, Row.class);

result.print();

Scala Table API可以通过导入org.apache.flink.api.scala._和org.apache.flink.table.api.scala._包来启用。

下面例子展示了Scala Table API如何构建, Table属性使用Scala表达式来引用,Scala表达式以`开头:

import org.apache.flink.api.scala._

import org.apache.flink.table.api.scala._

// 配置环境

val env = ExecutionEnvironment.getExecution

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值