字段太多看不全,ksql 的展开模式和输出控制怎么用
MySQL 里查宽表字段多了输出就会折行列对应关系容易看乱。MySQL 的解法是在 SQL 末尾加\G把每行的字段竖着列出来。ksql 里处理这个问题的方式不同——通过几个元命令控制整个会话的输出行为不用每条 SQL 末尾单独加。这篇在KingbaseES V009R001C010环境里验证\x展开模式、\x auto自动判断、\timing执行耗时、\pset border边框调整、\o输出重定向。演示在app_db库的app_schema.t_meta_demo表上进行用app_user连接进入后先执行set search_path to app_schema, public让后续查询不带 schema 前缀。有几个活动推荐给大家“1、荐商机·赢好礼——金仓社区“同行者计划”开启https://bbs.kingbase.com.cn/forumDetail?articleId1d09d598f414ab764eda4907e8f547582、2026金仓数据库智能运维工具开发大赛https://bbs.kingbase.com.cn/forumDetail?articleId2394013b19f3ef84a43edb994692b88ehttps://bbs.kingbase.com.cn/forumDetail?articleId6152608d769b472397ccfbd29879c0bd”默认输出下的宽表问题关掉分页器直接查全表\pset pageroffselect*fromt_meta_demo;t_meta_demo有id、order_no、user_name、status、amount、created_at六个字段终端宽度不够时每行折成多行字段名和值的对应关系很难一眼看清。这就是\x要解决的问题。\x 开关竖排展开和关闭打开展开模式再查一次\xselect*fromt_meta_demolimit2;再执行一次\x关掉对比两次输出\xselect*fromt_meta_demolimit2;\x打开后 ksql 提示Expanded display is on输出格式从横排表格变成竖列展示每个字段单独一行格式是字段名 | 值。再次执行\x提示Expanded display is off恢复横排。MySQL 里竖排显示用的是select ... \G写在 SQL 末尾只对那一条语句生效。\x是会话级开关打开以后所有查询都走竖排格式不需要每条 SQL 后面加。连续查几张宽表时\x比\G省事得多。\x auto让 ksql 自己决定要不要展开手动切\x来回有点麻烦。\x auto模式下 ksql 自动判断\x autoksql 返回Expanded display is used automatically。查单行结果select*fromt_meta_demowhereorder_noORD-20240601-001;再查多行select*fromt_meta_demo;单行查询下 ksql 自动用了竖排展开多行查询 ksql 判断终端宽度够用直接输出横排表格。\x auto的判断依据是当前终端宽度不是字段数量。同一张表终端窗口调窄 ksql 更倾向于展开调宽相同查询可能回到横排。MySQL 里没有这个模式\G每次都要手写在 SQL 末尾。\timing 显示执行耗时关掉展开模式开启计时\xoff\timing执行几条查询观察耗时selectcount(*)fromt_meta_demo;select*fromt_meta_demowherestatuspaid;selectuser_name,sum(amount)fromt_meta_demogroupbyuser_name;\timing开启后提示Timing is on每条 SQL 执行完都会跟着一行Time: x.xxx ms。MySQL 里看执行耗时通常需要show profiles或者借助客户端工具ksql 里\timing打开以后自动附在每个结果后面不用额外操作。但\timing给的是客户端侧的壁钟时间包含网络往返和客户端处理只适合粗粒度判断某条查询快不快。精确分析 SQL 是否走了索引、各执行节点耗时分布要用EXPLAIN (ANALYZE, BUFFERS)不能把\timing当性能分析工具来用。\pset border 调整输出边框关掉计时演示三种边框样式\timingoff默认边框border 1\pset border1selectorder_no,user_name,status,amountfromt_meta_demolimit3;无边框border 0\pset border0selectorder_no,user_name,status,amountfromt_meta_demolimit3;双线边框border 2\pset border2selectorder_no,user_name,status,amountfromt_meta_demolimit3;三种样式的差别border 1列之间用|分隔标题行下有------形式的分隔线是默认样式border 0去掉所有分隔符列之间只有空格标题和数据之间用短横线对齐border 2整个结果集外面加一圈完整边框顶部、底部、标题和数据之间都有分隔线\pset border只改显示格式不影响数据切换后立即生效。MySQL 客户端输出的边框样式固定ksql 这里可以按需调整。border 0在把终端输出粘贴进文档时最有用不用手动清格线。演示完以后恢复默认\pset border1\o 把输出写进文件在交互会话里把查询结果重定向到文件不需要退出去用 shell 重定向\pset border1\o/tmp/ksql-output.txtselectorder_no,user_name,status,amountfromt_meta_demo;\o\o /tmp/ksql-output.txt打开后ksql 不再把查询结果输出到终端——select执行后提示符直接回来没有任何表格输出结果都写进了文件。\o不带参数关闭重定向恢复终端输出。在另一个终端用cat /tmp/ksql-output.txt可以看到全部五行数据和直接在终端查的结果一致。有一个坑容易踩关闭重定向必须用\o不带任何参数。忘了关的话后续所有查询输出包括元命令的提示都会继续写文件终端里什么都看不到很容易以为命令没执行。MySQL 里在交互会话内导出结果通常要借助外部工具ksql 里\o可以直接在会话内切换用完记得关。