Tigergraph 图数据库学习-gsql

分享 123456789987654321 ⋅ 于 2022-09-03 12:01:27 ⋅ 1206 阅读

GSQL使用

1.设置会话超时时间

#不设置就是不超时候
[tigergraph@tiger1 root]$ export GSQL_CLIENT_IDLE_TIMEOUT_SEC=
#设置10s过期
[tigergraph@tiger1 root]$ export GSQL_CLIENT_IDLE_TIMEOUT_SEC=10

2.进入gsql

[root@localhost ~]# su tigergraph
[tigergraph@tiger1 root]$ gadmin status

#如果 GSQL shell 没有启动,请尝试使用“gadmin start all”重置系统

3.设置参数

#GSQL 的多个 shell 会话可以同时运行
#SET <session_parameter> = <value>

会话参数    含义和用法
#sys.data_root
该值应该是一个字符串,表示存储数据文件的文件夹的绝对或相对路径。设置参数后,加载语句可以使用 $sys.data_root 引用此参数。

#gsql_src_dir
该值应该是一个字符串,代表 gsql 系统安装的根文件夹的绝对或相对路径。设置参数后,加载语句可以使用 $gsql_src_dir 引用此参数。

#exit_on_error
当此参数为 true(默认)时,如果在运行 GSQL 命令文件时发生语义错误,则 GSQL shell 将终止。
接受的参数值:true、false(不区分大小写)。如果该参数设置为 false,则语法正确的命令文件将继续运行,即使个别命令中出现某些运行时错误。
具体来说,这会影响这些命令:CREATE QUERY, INSTALL QUERY, RUN JOB 语义错误包括对不存在的实体的引用或对实体的不当重用。
该会话参数不影响 GSQL 交互模式;GSQL 交互模式不会因任何错误而退出。此会话参数不会影响语法错误:GSQL 将始终在语法错误时退出。

#syntax_version
用于此会话的 GSQL 版本。接受的值为v1或v2。

#export_timeout
命令的超时限制(EXPORT GRAPH ALL以毫秒为单位)。默认值约为 138 小时。

4.使用远程 GSQL 客户端

1.安装

1.安装 TigerGraph 平台时,GSQL 客户端和服务器在同一台机器上。
2.客户端打包为 Java jar 文件,
3.gsql_client.jar 位于文件夹<TigerGraph_root_dir>/app/<VERSION_NUM>/dev/gdk/gsql/lib/ . 
4.安装包括将文件复制gsql_client.jar到客户端计算机并将其存储在用户认为合适的任何位置。
5.客户端计算机需要具有 Java 7.0 或更高版本。

2.运行客户端

#要运行客户端,命令
java -jar <path>gsql_client.jar

#定义一个 Unix 别名可能很有用:
alias gsql="java -jar <path>/gsql_client.jar"

#客户端需要满足三个条件:
1.它必须知道 GSQL 服务器的 IP 地址。
2.它必须有权访问服务器,特别是执行请求的 GSQL 命令。
3.如果使用 SSL/TLS 加密连接(例如 HTTPS),则它必须提供证书链。

#1.指定服务器 IP 地址
方法一:将地址存入文件。创建一个名为gsql_server_ip_config的单行文件,其中包含 GSQL 服务器的 IP 地址。此文件需要位于运行 GSQL 的同一目录中。

方法二:每次运行客户端jar,在命令行提供ip地址,如“ gsql -ip 192.168.55.46 ”

#客户端在服务器端口 14240 处寻址服务器

#3.HTTPS 连接
如果为 TigerGraph 启用 SSL/TLS,每个 GSQL 命令行都应通过 -cacert 选项提供证书链文件。
该证书文件应该与 Nginx.SSL.Cert 为 Nginx 设置 SSL 的条目文件完全相同
gsql -cacert /path/to/certificate -ip hostname:port

#文件路径语义  要使用文件的绝对路径
java -jar gsql_client.jar 'RUN JOB load_cf USING FILENAME="/home/tigergraph/example/cf/cf_data.csv", SEPARATOR=",", EOL="\n"

5.GSQL命令使用

5.1全部删除

GSQL > drop all

5.2重启 TigerGraph

# Start all services
GSQL >  gadmin restart -y

5.3特殊字符

#用单引号
GSQL > gsql 'ls'

5.4quit退出 GSQL shell

GSQL > quit

6.定义一个schema

6.1创建顶点类型

--使用 CREATE VERTEX 命令定义一个名为person的顶点类型
--PRIMARY_ID 是必需的:每个人都必须有一个唯一的标识符。
--关键字不区分大小写
--可以根据需要创建任意数量的顶点类型。
GSQL > CREATE VERTEX person (PRIMARY_ID name STRING, name STRING, age INT, gender STRING, state STRING)
The vertex type person is created.

6.2创建边缘类型

6.2.1双向边

#使用 CREATE ... EDGE 命令创建一个名为friends的边类型
#关键字 UNDIRECTED 表示这条边是双向边
#需要 FROM 和 TO 来指定边类型连接哪两种顶点类型
CREATE UNDIRECTED EDGE friendship (FROM person, TO person, connect_day DATETIME)

6.2.2单向边

#关键字 DIRECTED 表示这条边是单向边

6.3创建图表

#使用 CREATE GRAPH 命令创建名为social的图
CREATE GRAPH social (person, friendship)

6.4查看

#GSQL > CREATE GRAPH social (person, friendship)
Stopping GPE GSE RESTPP
Successfully stopped GPE GSE RESTPP in 41.182 seconds
Starting GPE GSE RESTPP
Successfully started GPE GSE RESTPP in 0.070 seconds
The graph social is created.
#GSQL > ls
---- Graph social
Vertex Types: 
  - VERTEX person(PRIMARY_ID name STRING, name STRING, age INT, gender STRING, state STRING) WITH STATS="OUTDEGREE_BY_EDGETYPE"
Edge Types: 
  - UNDIRECTED EDGE friendship(FROM person, TO person, connect_day DATETIME)
Graphs: 
  - Graph social(person:v, friendship:e)
Jobs: 
Queries: 

7.加载数据

7.1创建persion.csv文件

name,gender,age,state
Tom,male,40,ca
Dan,male,34,ny
Jenny,female,25,tx
Kevin,male,28,az
Amily,female,22,ca
Nancy,female,20,ky
Jack,male,26,fl

7.2创建friendship.csv文件

person1,person2,date
Tom,Dan,2017-06-03
Tom,Jenny,2015-01-01
Dan,Jenny,2016-08-03
Jenny,Amily,2015-06-08
Dan,Nancy,2016-01-03
Nancy,Jack,2017-03-02
Dan,Kevin,2015-12-30

7.3 定义加载作业

USE GRAPH social
BEGIN
CREATE LOADING JOB load_social FOR GRAPH social {
   DEFINE FILENAME file1="/home/tigergraph/person.csv";
   DEFINE FILENAME file2="/home/tigergraph/friendship.csv";

   LOAD file1 TO VERTEX person VALUES ($"name", $"name", $"age", $"gender", $"state") USING header="true", separator=",";
   LOAD file2 TO EDGE friendship VALUES ($0, $1, $2) USING header="true", separator=",";
}
END

7.4命令参数:

`USE GRAPH social`
    告诉 GSQL 你想使用哪个图
`BEGIN ... END`
    表示多行模式。GSQL shell 会将这些标记之间的所有内容视为一条语句。这些仅在交互模式下需要。如果您运行存储在命令文件中的 GSQL 语句,命令解释器将研究您的整个文件,因此它不需要 BEGIN 和 END 提示。
`CREATE LOADING JOB`

7.5运行加载作业

RUN LOADING JOB load_social

8.WebUi使用

#停止防火墙
systemctl disable firewalld
systemctl stop firewalld
#开放端口
firewall-cmd --zone=public --add-port=14240/tcp --permanent
#开放图形化界面
#GSQL >  gadmin start gui
#官方文档
https://docs.tigergraph.com/gui/3.2/graphstudio/overview
#请求地址
http://192.168.92.138:14240/#/schema-designer
#设置webui超时时间
$ gadmin config set GUI.ClientIdleTimeSec [timeout]

9.运行内置(顶点和边)查询

调用函数 stat_vertex_number 返回每个顶点类型的基数。

调用函数 stat_edge_number 返回每个边的基数。

9.1基础工具安装

#安装wget以及jq工具 需要切换root用户
[root@tiger1 tigergraph]# yum -y install wget
[root@tiger1 tigergraph]# wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
[root@tiger1 tigergraph]# chmod +x ./jq
[root@tiger1 tigergraph]# cp jq /usr/bin

9.2获取顶点统计信息

[root@tiger1 tigergraph]# curl -X POST 'http://localhost:9000/builtins/social' -d  '{"function":"stat_vertex_number","type":"*"}'  | jq .

{
  "version": {
    "edition": "enterprise",
    "api": "v2",
    "schema": 0
  },
  "error": false,
  "message": "",
  "results": [
    {
      "v_type": "person",
      "count": 7
    }
  ]
}

9.3获取边统计信息

[root@tiger1 tigergraph]# curl -X POST 'http://localhost:9000/builtins/social' -d  '{"function":"stat_edge_number","type":"*"}' | jq .
{
  "version": {
    "edition": "enterprise",
    "api": "v2",
    "schema": 0
  },
  "error": false,
  "message": "",
  "results": [
    {
      "e_type": "friendship",
      "count": 7
    }
  ]
}

9.4选择顶点(primary_id)

#使用其 primary_id 查找有关顶点的详细信息
[root@tiger1 tigergraph]#  curl -X GET "http://localhost:9000/graph/social/vertices/person/Tom" | jq .

{
  "version": {
    "edition": "enterprise",
    "api": "v2",
    "schema": 0
  },
  "error": false,
  "message": "",
  "results": [
    {
      "v_id": "Tom",
      "v_type": "person",
      "attributes": {
        "name": "Tom",
        "age": 40,
        "gender": "male",
        "state": "ca"
      }
    }
  ]
}

9.5选择边

#two parts
curl -X GET "http://localhost:9000/graph/edges/{source_vertex_type}/{source_vertex_id}/{edge_type}/"

#three parts
curl -X GET "http://localhost:9000/graph/edges/{source_vertex_type}/{source_vertex_id}/{edge_type}/{target_vertex_type}/{target_vertex_id}"
[root@tiger1 tigergraph]# curl -X GET "http://localhost:9000/graph/social/edges/person/Tom/friendship/" | jq .

{
  "version": {
    "edition": "enterprise",
    "api": "v2",
    "schema": 0
  },
  "error": false,
  "message": "",
  "results": [
    {
      "e_type": "friendship",
      "directed": false,
      "from_id": "Tom",
      "from_type": "person",
      "to_id": "Dan",
      "to_type": "person",
      "attributes": {
        "connect_day": "2017-06-03 00:00:00"
      }
    },
    {
      "e_type": "friendship",
      "directed": false,
      "from_id": "Tom",
      "from_type": "person",
      "to_id": "Jenny",
      "to_type": "person",
      "attributes": {
        "connect_day": "2015-01-01 00:00:00"
      }
    }
  ]
}

10.开发参数化查询(自定义查询)

10.1查询步骤

#GSQL 参数化查询包含三个步骤。
1.在 GSQL 中定义您的查询。此查询将添加到 GSQL 目录中。
2.在目录中安装一个或多个查询,为每个查询生成一个 REST 端点。
3.运行已安装的查询,提供适当的参数,作为 GSQL 命令或通过向 REST 端点发送 HTTP 请求。

10.2查询语法

--显示一个人的所有直接(1 hop)邻居,作为输入参数给出。
--Start = {p}; 从p开始遍历
--Start:s -(friendship:e)-> person:tgt
--“s”是源顶点集的别名,“e”是边集别名,“tgt”是目标顶点集别名。
--最后,以 JSON 格式打印出 Result 顶点集。

--开启gsql  gadmin start infra

USE GRAPH social

Begin
CREATE QUERY hello(VERTEX<person> p) {
  Start = {p};
  Result = SELECT tgt
           FROM Start:s-(friendship:e) ->person:tgt;
  PRINT Result;
}
End

--查看目录中查询的 GSQL 文本
--SHOW QUERY query_name
SHOW QUERY hello

10.3 .1创建查询(文件方式)

# 使用@filename 语法从 GSQL shell 中调用该文件
#filename(文件名)
# 将上述查询放到文件/home/tigergraph/hello.gsql 中,然后,进入GSQL shell,使用@hello.qsql调用文件
如果启动gsql时不在/home/tigergraph文件夹,可以使用绝对路径调用一个gsql文件。例如@/home/tigergraph/hello.gsql
# 然后运行“ls”命令查看查询现在是否在目录中。

10.3.2安装查询

GSQL>  INSTALL QUERY hello

10.3.2.1在 GSQL 中运行查询

GSQL >#  RUN QUERY hello("Tom")
{
  "error": false,
  "message": "",
  "version": {
    "schema": 0,
    "edition": "enterprise",
    "api": "v2"
  },
  "results": [{"Result": [
    {
      "v_id": "Dan",
      "attributes": {
        "gender": "male",
        "name": "Dan",
        "state": "ny",
        "age": 34
      },
      "v_type": "person"
    },
    {
      "v_id": "Jenny",
      "attributes": {
        "gender": "female",
        "name": "Jenny",
        "state": "tx",
        "age": 25
      },
      "v_type": "person"
    }
  ]}]
}

10.3.2.2使用curl查询结果

curl -X GET 'http://localhost:9000/query/social/hello?p=Tom'

10.4内置累加器

#OrAccum  @visited = false;  用@声明本地累加器
#AvgAccum @@avgAge;          用@@声明全局累加器

USE GRAPH social

Begin
CREATE QUERY hello2 (VERTEX<person> p) {
  OrAccum  @visited = false;
  AvgAccum @@avgAge;
  Start = {p};

  FirstNeighbors = SELECT tgt
                   FROM Start:s -(friendship:e)-> person:tgt
                   ACCUM tgt.@visited += true, s.@visited += true;

  SecondNeighbors = SELECT tgt
                    FROM FirstNeighbors -(:e)-> :tgt
                    WHERE tgt.@visited == false
                    POST_ACCUM @@avgAge += tgt.age;

  PRINT SecondNeighbors;
  PRINT @@avgAge;
}
End

INSTALL QUERY hello2

RUN QUERY hello2("Tom")
gsql hello2.gsql
版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-123456789987654321,http://hainiubl.com/topics/75904
点赞
成为第一个点赞的人吧 :bowtie:
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter