kingbase之ksql命令工具

Posted 枫树湾河桥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kingbase之ksql命令工具相关的知识,希望对你有一定的参考价值。

原文链接:https://blog.csdn.net/carefree2005/article/details/127508686

一、ksql命令工具简介
  ksql是人大金仓提供给DBA的与KES数据库交互的命令行客户端程序。熟练使用ksql工具可以帮助DBA快速的操作和维护数据库。博文实验环境:

操作系统:centos7.6
kingbase版本:V008R006C006B0021
二、ksql使用示例
1、获取命令帮助
[kingbase@s166 bin]$ ./ksql --help

2、指定用户登录test库
[kingbase@s166 bin]$ ./ksql -U system test
ksql (V8.0)
Type “help” for help.

test=#

3、强制要求输入密码
  经实践测试,通过默认local socket登录不需要输入密码,及时使用-W参数强制要求输入密码,实际上任意输入值都可以完成验证。

[kingbase@s166 bin]$ ./ksql -U system -W test
Password:
ksql (V8.0)
Type “help” for help.

test=#

4、指定数据库地址登录
  指定了-h参数后,无论我们是否使用-W参数都要求输入用户名密码完成验证才可以登录数据库。

[kingbase@s166 bin]$ ./ksql -U system -h 192.168.0.166 test
Password for user system:
ksql (V8.0)
Type “help” for help.

test=#

5、指定数据库监听端口地址登录
  如果kingbase数据库实例配置了指定端口,则客户端连接的时候需要使用-p参数指定数据库端口,kingbase数据库服务默认监听端口54321。

[kingbase@s166 bin]$ ./ksql -U system -h localhost -p 54321 test
Password for user system:
ksql (V8.0)
Type “help” for help.

test=#

6、查看数据库版本
[kingbase@s166 bin]$ ./ksql -V
ksql (Kingbase) V008R006C006B0021

7、查看数据库列表
[kingbase@s166 bin]$ ./ksql -U system -l


8、连接指定的数据库
[kingbase@s166 bin]$ ./ksql -U system -d booklist
ksql (V8.0)
Type “help” for help.

booklist=#

9、执行指定的sql脚本
[kingbase@s166 bin]$ echo “select connections;” >> /tmp/test.sql
[kingbase@s166 bin]$ ./ksql -U system -f /tmp/test.sql test
connections
-------------
7
(1 row)

10、显示执行的sql脚本中的命令
  使用-e参数显示执行的sql脚本中的命令


11、不显示登录信息
[kingbase@s166 bin]$ ./ksql -U system -q test
test=#

12、显示内部生产的查询命令
  如果我们需要了解内部产生的查询命令,可以使用-E参数,如下示例我们执行-l参数打印数据库列表,实际上执行的命令是select d.datname as “Name”…


13、将会话日志存储到指定文件
  使用-L命令指定将会话日志存储到指定路径。连接数据库后所有的操作都将记录下来。


14、将查询结果写入指定文件
  使用-o命令将ksql命令执行的查询结果存储到指定文件中。


15、调整结果为纵向展示
  使用-x参数调整行列,展示样式调整为纵向展示。


16、执行单行命令
  使用-c参数在ksql命令下直接执行命令并显示结果。


17、指定输出格式
  我们可以使用-H,–csv等指定输出为样式为html或者csv。


三、ksql命令参数说明
1、命令语法
用法:ksql [OPTION]… [DBNAME [USERNAME]]

2、通用参数
参数 参数说明
-c, --command=COMMAND 连接数据库后执行单行命令,执行完成后退出连接
-d, --dbname=DBNAME 指定连接的数据库名称
-f, --file=FILENAME 连接数据库时执行的脚本,执行完成后退出数据库连接
-l, --list 打印数据库列表
-v, --set=, --variable=NAME=VALUE 设置数据库参数变量
-V, --version 打印数据库版本信息
-X, --no-ksqlrc 不读取启动文件(~/.ksqlrc)
-1 (“one”), --single-transaction 作为单个事务执行(如果非交互式)
-?, --help 获取命令帮助,然后退出
3、输入输出参数
参数 参数说明
-a,–echo-all echo来自脚本的所有输入
-b,–echo-errors echo失败的命令
-e,–echo-queries 发送到服务器的echo命令
-E,–echo-hidden 显示内部命令生成的查询
-L,–log-file=FILENAME 将会话日志发送到文件
-n,–no-readline 禁用增强的命令行编辑
-o,–output=FILENAME 将查询结果发送到文件(或
-q,–quiet 不输出登录提示信息
-s,–single-step 单步模式(确认每个查询)
-S,–single-line 单行模式(行尾终止SQL命令)
4、输出格式参数
参数 参数说明
-A, --no-align 未对齐表输出模式
–csv (逗号分隔值)表格输出模式
-F, --field-separator=STRING 设置未对齐输出的字段分隔符(默认值:“
-H, --html html表格输出模式
-P, --pset=VAR[=ARG] 将打印选项VAR设置为ARG
-R, --record-separator=STRING 未对齐输出的记录分隔符(默认值:换行符)
-t, --tuples-only 不输出字段名
-T, --table-attr=TEXT 设置HTML表标记属性(例如,宽度、边框)
-x, --expanded 调整查询结果为纵向展示
-z, --field-separator-zero 将未对齐输出的字段分隔符设置为零字节
-0, --record-separator-zero 将未对齐输出的记录分隔符设置为零字节
5、连接参数
参数 参数说明
-h, --host=HOSTNAME 连接数据库的主机地址或者socket路径,默认local socket
-p, --port=PORT 指定连接数据库端口,默认54321
-U, --username=USERNAME 连接数据库用户名,默认kingbase
-w, --no-password 允许不输入密码
-W, --password 强制要求输入密码

KSQL与Flink SQL的比较

  Confluent公司于2017年11月宣布KSQL进化到1.0版本,标志着KSQL已经可以被正式用于生产环境。自那时起,整个Kafka发展的重心都偏向于KSQL——这一点可以从Confluent官方博客中KSQL出现的频率之高看出端倪。鉴于最近周围有很多小伙伴都在讨论KSQL,我突然想起了去年9月份Apache Flink“掌门人” Stephan Ewen所写的关于KSQL V.S. Flink SQL的一篇博客,里面很多有意思的观点非常值得品味~~  

  事情起源于去年8月底Confluent公司的产品经理Michael G. Noll在Twitter上发布了一条消息: 

  大概的意思是KSQL和Flink SQL一个关键的区别在于:KSQL是纯SQL语言的扩展,你不需要使用Java或Scala写程序的方式来实现,而反观上图右边的Flink SQL,用户必须手动编写一些代码与之结合使用。这样来看,使用KSQL要比Flink SQL简单得多。

  发完这条Twitter之后,Flink掌门人Stephan Ewen立刻做出了回应:


KSQL与Flink SQL的比较

 “如果这就是你说的KSQL相对于Flink SQL的最大优势,那么看看我下面的这20行代码,它已经‘修复’了你说的这个问题。。。。”

 

    两人的”针锋相对“实在有些意思,特别是Stephen Ewen于第二天在Flink官方博客上发布了一篇博文,里面详细对比了KSQL与Flink SQL的区别,更人觉得有下面让我们来看一看。(值得一提的是,Ewen对比的KSQL还是1.0之前的Demo版本,里面的很多内容在今天看来也许已经过时了。。。)

  首先,Ewen正面承认了Flink SQL确实是Java/Scala + SQL的嵌入式混搭方式,而KSQL则是SQL-like Only,即纯SQL的方式。这种区别会有这么大的关注令Ewen始料未及,并且他给出了两种实现方式各自的应用场景。Ewen认为:纯SQL最适合于ad hoc查询以及数据分析之用,而嵌入式的SQL语句方式则主要用于数据管道。Flink社区之所以选择第二种方式主要是因为它主要满足了早期Flink SQL用户的场景。另外这种方式还无缝支持类型检查以及与Flink 其他API的天然适配。当然,纯SQL的方式也是非常有用的,Flink已有也必然会支持。事实上, Ewen已经实现了一个简单的wrapper实现了在Flink中使用纯SQL。

  第二,从线上部署情况来看,Ewen坦言Flink SQL已经成功应用于很多大公司,如Uber、阿里巴巴以及华为,但KSQL依然还在Demo阶段(至少在去年9月份)。用户如果要立刻在线上环境部署并使用streaming SQL,那么显然Flink SQL是更好的选择。

  第三,Flink SQL底层是统一化的批处理和流处理机制——事实上Flink将批处理仅仅当做是流处理的一种特殊情况来实现,故我们可以安全地认为Flink SQL同时支持批处理和流式处理,而KSQL目前还不支持批处理,因此对于那些想在静态数据集合或静态数据文件上执行SQL查询的用户可以使用Flink SQL。

  第四,Flink SQL使用的标准的SQL语言,而KSQL集成了一组它特有的命令,并非扩展自标准SQL语言。如果SQL的通用度对用户来说很重要的话,那么应该使用Flink SQL。

  第五,Flink SQL本身支持UDF、常用的聚合函数以及join,但目前KSQL尚未提供诸如UDF等功能。

  第六,虽然也成立了Data Artisans公司用于企业级的Flink部署,但Flink SQL本质上依然还是由Apache Flink社区来开发,特别是有像Uber、阿里巴巴以及华为这样的大公司参与。反观KSQL,它已经不再由Apache Kafka社区维护,而是由Confluent公司完全独立管理,故开发的活跃度上可能无法与Flink SQL相比。

 

可以想见,Ewen在这篇文章中力推Flink SQL。我十分期待KSQL 1.0发布之后Confluent如何回应:)


以上是关于kingbase之ksql命令工具的主要内容,如果未能解决你的问题,请参考以下文章

人大金仓(KingBase)导出表结构

kingbase(人大金仓)导出导入指定表

kingbase(人大金仓)导出导入指定表

KSQL与Flink SQL的比较

人大金仓Kingbase8安装与基本使用

Kingbase数据类型格式化函数