系统和语言基础
运行GSQL
新版本中的的-g选项可以设定工作图
在shell提示符上输入gsql即可进入GSQL交互模式。用户也可以同时输入用户名、密码以及交互模式所需要使用的图数据库名。
如果仅仅提供了用户名,GSQL会要求输入用户密码:
假设没有提供用户名,则GSQL会默认使用tigergraph这个用户名:
想要退出GSQL shell,输入exit
或quit
即可:
GSQL> EXIT
或 GSQL> QUIT
多个Shell会话
多会话模式允许GSQL同时运行多个会话,从而使得多个客户端(用户或计算机)能够同时连接数据库并同步操作。数据的一致性和数据隔离由加锁逻辑来实现。
多行模式:- BEGIN, END, ABORT
在交互模式中,默认每一行对应一个语句。GSQL解释器会在行末字符(End-Of-Line character)出现的时候运行本行代码。
但是在多行模式中,用户可以将一行命令分多行输入,而不会在行末立刻执行代码。这种模式在某条语句特别长的时候非常实用。另一个用处是在定义JOB时使用,因为一个JOB通常包含多个语句。
通过命令BEGIN可以进入多行模式。此时行末字符不会激活代码运行。此时shell会始终处于多行模式中,直到END命令被输入。END命令会一次性执行多行模式中的所有代码。下面的示例中BEGIN和END的使用,让SELECT长语句可以分多行输入。
此外,通过ABORT命令可以临时退出多行模式,此前输入的代码不会被执行。
脚本文件(Command Files)和内联命令(Inline Commands)
命令文件是一个包含一系列GSQL语句的文本文件。其中的空白行和注释部分会被系统忽略执行。按照惯例,GSQL脚本文件会以. gsql 结尾,但是客户也可自定义。命令文件会自动被识别为多行模式,所以无需使用BEGIN和END命令进行标识。脚本文件的执行方式为:在GSQL shell中将文件名前添加@符号,例如:
GSQL> @file.gsl
或者在操作系统(如Linux Shell)中把文件名作为参数传递给gsql命令:
os$ gsql file.gsql
同理,单个GSQL命令也可以作为字符串,在被引号引用后,放在GSQL语句中直接运行。使用单引号双引号皆可。建议如果针对整个命令则使用单引号,而针对命令中的字符串使用双引号。
下面的示例中,文件name_query.gsql包含了一个多行语句块CREATE QUERY,该语句块定义了namesSimilar这个查询:
帮助信息
可以通过help
命令查询现有GSQL的帮助信息:
GSQL> HELP [BASIC|QUERY]
HELP
命令包含可选项,可以针对某些指定的命令显示更详细的信息。
ls
命令用于显示目录(catalog),展示所有的顶点类,边类,图形,查询,作业以及用户自定义的会话参数。
--reset 选项
--reset选项会从Dictionary中删除整个数据库数据以及相关联的定义内容(包括图模型、数据加载任务、查询任务);这个删除操作是不可逆的,所以请务必谨慎使用。同时,REST++,GPE和GSE三个模块也会随之关闭:
总结:
下表列出了目前已经介绍过的所有基础命令:
关于LS命令的注释:
从1.2版本开始,ls命令根据不同用户和不同的当前图形,会有不同的输出结果:
若用户未指定查询图或指定要求全局结果(USE GLOBAL)
若该用户为超级用户,则ls命令显示全局顶点、全局边以及所有图数据库结构(graph schema)
若该用户不是超级用户,则ls显示结果为空(null)
若用户已指定查询图,则ls输出结果只显示对应图模型、数据加载任务、查询任务和其他定义内容信息。
会话参数
会话参数(session parameter)是内建的系统变量,变量值仅在当前会话中有效,在会话结束后失效。在一个交互式命令行模式下,会话自进入命令行模式时开始,在退出命令行模式时结束。若运行一个命令文件,则该会话的时间为文件执行的时间。
通过SET命令可以设置会话参数
属性的数据类型
每个顶点和边的属性都拥有一个指定的数据类型。下表列出了目前支持的数据类型:
基本类型
对于FLOAT和DOUBLE值来说,GSQL Loader支持科学计数法(如1.25E-7)
GSQL目前只能够读取非科学计数法的数值。 但是可以将结果以指数表示法显示。
某些数学运算式可能会返回非数字字符串结果,例如无穷大表示为“inf”。非数字结果表示为“NaN” (Not a Number)。
高级数据类型
此外,GSQL也支持以下复杂数据类型:
复杂数据类型
用户定义元组(UDT):用户定义元组表示一个由若干字段(field)组成的有序结构。字段可以是同一类型或不同类型。 支持的字段类型如下所示。用户定义元组中的每个字段都具有固定大小。 字符串类型的字段必须指定一个字符长度。加载程序仅加载对应字符串开头指定长度的部分。 INT类字段和UINT类字段的大小可选择是否指定(以字节为单位)。
示例: 定义一个UDT
在本示例中,myTuple是UDT的名字,它包含了四个字段:一个名叫field1的单字节的INT字段,一个名叫field2的四字节UINT字段,一个名叫field3的十字符长度字符串,以及一个名叫field4的八字节DOUBLE字段。
LIST/SET:Set表示一个由同样类型的独立元素组成的集合,集合内的元素没有顺序要求。而List也表示由数个元素组成的集合,但内部元素有先后顺序。List中的元素可以重复,Set中的元素不可以重复。List和Set的默认值都为空集。List和Set支持的元素数据类型包括INT,DOUBLE,STRING,STRING COMPRESS,DATETIME和UDT。若要声明一个list或set,可使用尖括号<>将涉及到的元素括起来,例如:
SET<INT>, LIST<STRING COMPRESS>.
由于GSQL采用多线程加载,所以初始加载到一个LIST中的元素顺序可能和原始顺序不同。
MAP:Map是由键-值对(key-value pair)组成的集合。它不能包含重复的键,且每一个键对应唯一的值。Map的默认值为空集。键的数据类型可以是DOUBLE, STRING, STRING COMPRESS, DATETIME和UDT。 若想声明一个map类,使用尖括号<>将元素括起来,并用逗号分隔键和值。例如:
MAP<INT, DOUBLE>.
Last updated