我是Apache Flink的新手,希望了解DataStream和Table API之间的用例。请帮助我理解何时选择表API而不是数据流API。
根据我的理解,可以使用Table API完成的事情也可以使用DataStream API完成。两种API有何不同?
Table API是一个关系型API,它统一了批处理和流处理。相同的查询可以在静态批处理数据上运行,也可以在连续流数据上运行。表API类似于SQL。查询被优化并转换为数据集(批(或数据流(流(程序,即表API查询作为数据流程序执行。您可以在用户定义的函数中实现许多自定义逻辑,但表API以关系操作(过滤、投影、联接、聚合(为中心。因此,表API主要用于ETL/数据管道或数据分析应用程序也就不足为奇了。
DataStream API是一个API,用于实现流处理应用程序和更通用的应用程序。大多数逻辑是作为Java或Scala类实现的。进程函数公开时间和状态,它们是任何类型的流应用程序的基本构建块。除了数据管道和分析之外,您还可以使用DataStream API实现事件驱动的应用程序。
如果你能用Table API实现逻辑,那就去实现吧。程序会更简单、更简洁。如果您需要更多的控制并且有很多自定义逻辑,请使用DataStream API。顺便说一句,您可以轻松地混合和匹配这两个API,因为DataStream
可以轻松地转换为Table
,反之亦然。