多数情况下,gbase数据库都设置有各种权限限制。尤其是普通用户,往往只有部分库表的查询权限,就更谈不上去执行gcadmin命令,来查看表锁的状态了。
为了能够顺利的知道锁表的状态,最便捷的是 gcadmin showlock命令。并且这个需要在gbase的主机节点上去执行。普通用户远程使用sql访问,怎么办呢?
下面给出办法:
在jdbc的sql链接查询工具中,直接执行如下语句,就可以在会话session所在的主机,执行gcadmin showlock命令,并返回结果在查询窗口!是不是很强大
select python('import commands\n(status,output) = commands.getstatusoutput(r"gcadmin showlock")\nreturn "\\n"+output.strip()');
如果是在gbase studio企业管理器,也就是官方客户端去执行,返回结果格式化会有问题,很不好观察结果。因此这样执行就ok了:
select python('import commands\n(status,output) = commands.getstatusoutput(r"gcadmin showlock")\nreturn "\\n"+output.replace(r"\x1b[31m\x1b[0m","")');
聪明的朋友可能已经发现了,gcadmin showlock 是个linux终端命令,所以其输出的字符串中有一些格式控制字符,只需要把这些格式控制字符过滤掉,在UI类工具中呈现就会出问题。但是在linux命令行下的工具的话,就不会出问题,比如sqline、beeline等。
更用心的童鞋可能已经发现了,这个貌似是python自定义函数,其实只要是python能做的事情,它都能做。有个python环境,可以做更多数据加工,比如如果主机上安装上anaconda的话,可以让gbase结合机器学习算法去工作。
Gbase的python自定义函数,功能很强大。可以调用所有节点上的python,加工数据。做python可以做的所有动作。功能很强大~~~比如充分利用python的pandas啊、numpy啊之类非常棒的数据处理工具,来增强数据处理功能。或者在自定义方法里使用机器学习算法函数等。
当GBase数据库用户权限有限时,无法直接执行gcadminshowlock命令。通过在jdbc的SQL连接工具中执行特定的Python语句,可以在会话所在主机上运行gcadminshowlock并显示结果。对于GBasestudio,需要过滤输出的格式控制字符。此方法利用Python自定义函数,允许在客户端查询表锁状态,甚至进行更复杂的数据处理和机器学习任务。
977





