Flink 的 Table & SQL API 可以处理 SQL 语言编写的查询语句,但是这些查询需要嵌入用 Java 或 Scala 编写的表程序中。此外,这些程序在提交到集群前需要用构建工具打包。这或多或少限制了 Java/Scala 程序员对 Flink 的使用。
SQL 客户端 的目的是提供一种简单的方式来编写、调试和提交表程序到 Flink 集群上,而无需写一行 Java 或 Scala 代码。SQL 客户端命令行界面(CLI) 能够在命令行中检索和可视化分布式应用中实时产生的结果。

 

1、启动SQL CLI

 

启动yarn-session供flink sql cli使用
/usr/flink-1.12.0/bin/yarn-session.sh  -nm flink-cli -d

启动sql-client
/usr/flink-1.12.0/bin/sql-client.sh embedded -s yarn-session

设置时区
SET 'table.local-time-zone' = 'Asia/Shanghai';

2、CLI 为维护和可视化结果提供三种模式

 

​表格模式(table mode)

​在内存中实体化结果,并将结果用规则的分页表格可视化展示出来。执行如下命令启用:

SET 'sql-client.execution.result-mode' = 'table';​

变更日志模式(changelog mode)​

不会实体化和可视化结果,而是由插入(+)和撤销(-)组成的持续查询产生结果流。

SET 'sql-client.execution.result-mode' = 'changelog';​

Tableau模式(tableau mode)

​更接近传统的数据库,会将执行的结果以制表的形式直接打在屏幕之上。具体显示的内容会取决于作业 执行模式的不同(execution.type):

SET 'sql-client.execution.result-mode' = 'tableau';
​注意​:当你使用这个模式运行一个流式查询的时候,Flink 会将结果持续的打印在当前的屏幕之上。如果这个流式查询的输入是有限的数据集, 那么Flink在处理完所有的数据之后,会自动的停止作业,同时屏幕上的打印也会相应的停止。如果你想提前结束这个查询,那么可以直接使用 CTRL-C 按键,这个会停掉作业同时停止屏幕上的打印。

 

这几种结果模式在 SQL 查询的原型设计过程中都非常有用。这些模式的结果都存储在 SQL 客户端 的 Java 堆内存中。为了保持 CLI 界面及时响应,变更日志模式仅显示最近的 1000 个更改。表格模式支持浏览更大的结果,这些结果仅受可用主内存和配置的最大行数(sql-client.execution.max-table-result.rows)的限制。注意:在批处理环境下执行的查询只能用表格模式或者Tableau模式进行检索

 

3、Catalog类型

GenericInMemoryCatalog

 GenericInMemoryCatalog 是基于内存实现的 Catalog,所有元数据只在 session 的生命周期内可用。

JdbcCatalog 

JdbcCatalog 使得用户可以将 Flink 通过 JDBC 协议连接到关系数据库。PostgresCatalog 是当前实现的唯一一种 JDBC Catalog。参考 JdbcCatalog 文档 获取关于配置 JDBC catalog 的详细信息。

HiveCatalog 

HiveCatalog 有两个用途:作为原生 Flink 元数据的持久化存储,以及作为读写现有 Hive 元数据的接口。Flink 的 Hive 文档 提供了有关设置 HiveCatalog 以及访问现有 Hive 元数据的详细信息。

 

Hive Metastore 以小写存储所有元数据对象名称;GenericInMemoryCatalog 区分大小写。

 

4、Catalog使用


显示所有catalog
# 显示所有catalog
Flink SQL> show catalogs;
default_catalog
myhive
切换到默认catalog,默认databases

Flink SQL> show databases;
default_database

Flink SQL> show tables;
user_opt
创建hive catalog

CREATE CATALOG myhive WITH (
'type' = 'hive',
'default-database' = 'ods',
'hive-conf-dir' = '/data/hive/conf/'
);
USE CATALOG myhive;
切换到hive catalog,db

Flink SQL> show databases;
ads
default
dim
dwd
dws
ods


Flink SQL> show tables;
# 依赖于hive catalog,所有ods层表
设置hive-dialect
SET table.sql-dialect=hive;

5、CLI 常用配置


-- Define available catalogs
CREATE CATALOG MyCatalog
WITH (
'type' = 'hive'
);


USE CATALOG MyCatalog;


-- Define available database
CREATE DATABASE MyDatabase;
USE MyDatabase;


-- Define TABLE
CREATE TABLE MyTable(
MyField1 INT,
MyField2 STRING
) WITH (
'connector' = 'filesystem',
'path' = '/path/to/something',
'format' = 'csv'
);


-- Define VIEW
CREATE VIEW MyCustomView AS SELECT MyField2 FROM MyTable;


-- Define user-defined functions here.
CREATE FUNCTION foo.bar.AggregateUDF AS myUDF;


-- Properties that change the fundamental execution behavior of a table program.
-- execution mode either 'batch' or 'streaming'
SET 'execution.runtime-mode' = 'streaming';
-- available values: 'table', 'changelog' and 'tableau'
SET 'sql-client.execution.result-mode' = 'table';
-- optional: maximum number of maintained rows
SET 'sql-client.execution.max-table-result.rows' = '10000';
-- optional: Flink's parallelism (1 by default)
SET 'parallelism.default' = '1';
--optional: interval for periodic watermarks
SET 'pipeline.auto-watermark-interval' = '200';
-- optional: Flink's maximum parallelism
SET 'pipeline.max-parallelism' = '10';
-- optional: table program's idle state time
SET 'restart-strategy' = 'fixed-delay';
SET 'table.exec.state.ttl' = '1000';


-- Configuration options for adjusting and tuning table programs.
SET 'table.optimizer.join-reorder-enabled' = 'true';
SET 'table.exec.spill-compression.enabled' = 'true';
SET 'table.exec.spill-compression.block-size' = '128kb';

 

5、问题:Hive分区,常用时间


2021-12-09 17:41:26
java.lang.IllegalArgumentException: Could not parse value '30 m' for key 'sink.partition-commit.delay'.
at org.apache.flink.configuration.Configuration.getOptional(Configuration.java:758)
at org.apache.flink.configuration.Configuration.get(Configuration.java:743)
at org.apache.flink.table.filesystem.stream.PartitionTimeCommitTrigger.<init>(PartitionTimeCommitTrigger.java:91)
at org.apache.flink.table.filesystem.stream.PartitionCommitTrigger.create(PartitionCommitTrigger.java:70)
at org.apache.flink.table.filesystem.stream.PartitionCommitter.initializeState(PartitionCommitter.java:109)
at org.apache.flink.streaming.api.operators.StreamOperatorStateHandler.initializeOperatorState(StreamOperatorStateHandler.java:107)
at org.apache.flink.streaming.api.operators.AbstractStreamOperator.initializeState(AbstractStreamOperator.java:264)
at org.apache.flink.streaming.runtime.tasks.OperatorChain.initializeStateAndOpenOperators(OperatorChain.java:400)
at org.apache.flink.streaming.runtime.tasks.StreamTask.lambda$beforeInvoke$2(StreamTask.java:507)
at org.apache.flink.streaming.runtime.tasks.StreamTaskActionExecutor$1.runThrowing(StreamTaskActionExecutor.java:47)
at org.apache.flink.streaming.runtime.tasks.StreamTask.beforeInvoke(StreamTask.java:501)
at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:531)
at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:722)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:547)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Time interval unit label 'm' does not match any of the recognized units: DAYS: (d | day | days), HOURS: (h | hour | hours), MINUTES: (min | minute | minutes), SECONDS: (s | sec | secs | second | seconds), MILLISECONDS: (ms | milli | millis | millisecond | milliseconds), MICROSECONDS: (µs | micro | micros | microsecond | microseconds), NANOSECONDS: (ns | nano | nanos | nanosecond | nanoseconds)
at org.apache.flink.util.TimeUtils.parseDuration(TimeUtils.java:101)
at org.apache.flink.configuration.ConfigurationUtils.convertToDuration(ConfigurationUtils.java:351)
at org.apache.flink.configuration.ConfigurationUtils.convertValue(ConfigurationUtils.java:291)
at org.apache.flink.configuration.Configuration.lambda$getOptional$2(Configuration.java:755)
at java.util.Optional.map(Optional.java:215)
at org.apache.flink.configuration.Configuration.getOptional(Configuration.java:755)
... 14 more


DAYS: (d | day | days),
HOURS: (h | hour | hours),
MINUTES: (min | minute | minutes),
SECONDS: (s | sec | secs | second | seconds),
MILLISECONDS: (ms | milli | millis | millisecond | milliseconds),
MICROSECONDS: (µs | micro | micros | microsecond | microseconds),

-----------------------------------
©著作权归作者所有:来自51CTO博客作者hyunbar777的原创作品,请联系作者获取转载授权,否则将追究法律责任
Flink SQL CLI
https://blog.51cto.com/u_15318160/4861058

 posted on 2023-04-10 16:15  xibuhaohao  阅读(638)  评论(0)    收藏  举报