flink sql 批处理

浩客1年前技术文章1298

进入flink sql命令行

sql-client.sh

Source 表 

       与所有 SQL 引擎一样,Flink 查询操作是在表上进行。与传统数据库不同,Flink 不在本地管理静态数据;相反,它的查询在外部表上连续运行。

       Flink 数据处理流水线开始于 source 表。source 表产生在查询执行期间可以被操作的行;它们是查询时 FROM 子句中引用的表。这些表可能是 Kafka 的 topics,数据库,文件系统,或者任何其它 Flink 知道如何消费的系统。

       可以通过 SQL 客户端或使用环境配置文件来定义表。SQL 客户端支持类似于传统 SQL 的 SQL DDL 命令。标准 SQL DDL 用于创建修改删除表。Flink 支持不同的连接器格式相结合以定义表。

# Source表  -- hdfs source

-- 将数据上传到hdfs
hadoop dfs -mkdir -p /data/peoples
hadoop dfs -put student.txt /data/peoples

CREATE TABLE student (
    id STRING,
    name STRING,
    age INT,
    gender STRING,
    clazz STRING
) WITH ( 
    'connector' = 'filesystem',
    'path' = 'hdfs://master:9000/data/peoples',
    'format' = 'csv'
);

连续查询 

       虽然最初设计时没有考虑流语义,但 SQL 是用于构建连续数据流水线的强大工具。Flink SQL 与传统数据库查询的不同之处在于,Flink SQL 持续消费到达的行并对其结果进行更新。

        一个连续查询永远不会终止,并会产生一个动态表作为结果。动态表是 Flink 中 Table API 和 SQL 对流数据支持的核心概念。连续流上的聚合需要在查询执行期间不断地存储聚合的结果。

select clazz,count(1) as c  
from student
group by clazz;

Sink 表 

        当运行此查询时,SQL 客户端实时但是以只读方式提供输出。存储结果,作为报表或仪表板的数据来源,需要写到另一个表。这可以使用 INSERT INTO 语句来实现。本节中引用的表称为 sink 表。INSERT INTO 语句将作为一个独立查询被提交到 Flink 集群中。

# sink表(保存查询数据) --  hdfs sink 

CREATE TABLE clazz_num (
    clazz STRING,
    c BIGINT
) WITH ( 
    'connector' = 'filesystem',
    'path' = 'hdfs://master:9000/data/clazz_num',
    'format' = 'csv'
);


# 将连续查询的结果插入到sink表中
batch是输出最终的结果,streamg模式输出连续结果

-- 如果连续查询的返回的动态表是一个更新的表
-- 插入语句的返回的字段和类型和sink表一致
SET 'execution.runtime-mode' = 'batch';   使用批处理模式写入hdfs

insert into clazz_num
select clazz,count(1) as c  
from student
group by clazz;

hadoop dfs -ls /data/clazz_num
hadoop dfs -cat /data/clazz_num/*

提交后,它将运行并将结果直接存储到 sink 表中,而不是将结果加载到系统内存中。

相关文章

CDH实操--客户端安装

CDH实操--客户端安装

概述安装CDH客户端,主要是方便在CDH部署节点以外,通过客户端的方式连接CDH上的hdfs,hive和hbase服务1、安装jdk(适配CDH即可,一般1.8)2、获取安装包3、部署安装包把安装包解...

A集群导入B集群中的高可用版rancher,一直处于pending状态

A集群导入B集群中的高可用版rancher,一直处于pending状态

问题现象:已知在B集群中采用helm方式部署了一个高可用版本的rancher,该rancher中已经配置导入了三套集群,并且三套集群状态在rancher控制台处均显示正常,日常可借助该rancher管...

Ambari部署

Ambari部署

Ambari 官方资料入口:https://www.cloudera.com/products/open-source/apache-hadoop/apache-ambari.htmlAmbari 相...

pg_restore

逻辑备份恢复PG提供了pg_restore的命令可以为通过pg_dump转储的数据进行逻辑恢复。对于SQL脚本可通过psql进行恢复语法pg_restore [connection_option] [...

datahub安装部署

datahub安装部署

背景:由于某客户需要建立sparksql的血缘关系,于是乎提出datahub,由于网上关于datahub资料较少,因此这里做以记录datahub作为一个元数据管理平台,他可以对数据资产进行有效的组织,...

8.0 新特性-Generated Invisible Primary Key

8.0 新特性-Generated Invisible Primary Key

说明MySQL Innodb 引擎采用的是 IOT(索引组织表)存储方式,主键的重要性就不言而喻。在早期版本用户如果没有显式指定主键,会自动生成隐藏主键 row_id 来组织 B+ 树,隐藏主键 ro...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。