0
点赞
收藏
分享

微信扫一扫

excel入门

春意暖洋洋 2023-08-16 阅读 4

文章目录

tips:在TigerGraph中,可以使用图形化界面创建数据库,映射数据;此处介绍的是使用GSQL的方式

创建图数据库

创建顶点

CREATE VERTEX 顶点名(
 PRIMAEY_ID 主键 STRING,
 属性1 STRING
 属性2 STRING
 属性3 INT
);

数据类型

  • INT:INT 是整数类型,用于存储有符号的整数值。它可以表示负数和正数,但不包括小数部分。
  • UINT:UINT 是无符号整数类型,用于存储非负整数值。它只能表示非负数,不包括负数和小数部分。
  • FLOAT:FLOAT 是单精度浮点数类型,用于存储带有小数点的数值。它提供较高的精度和范围,适用于大多数浮点数计算需求。
  • DOUBLE:DOUBLE 是双精度浮点数类型,用于存储双精度浮点数值。它提供更高的精度和范围,相对于 FLOAT,适用于需要更高精度计算的场景。
  • STRING:STRING 是字符串类型,用于存储文本数据。它可以包含任意长度的字符序列。
  • VARCHAR:VARCHAR 是可变长度字符串类型,用于存储可变长度的文本数据。与 STRING 类型不同,VARCHAR 类型可以指定最大长度,节省存储空间。

创建边

无向边

CREATE UNDIRECTED EDGE 边名(
    FROM 起始顶点,
    To 结束顶点
);

有向边

CREATE DIRECTED EDGE 边名(
    FROM 起始顶点,
    To 结束顶点
);

反向边

如果声明CREATE DIRECTED EDGE时同时声明了参数WITH REVERSE_EDGE=" rev_name ",则会自动生成一个额外的有向型边" rev_name "。该边的起点与终点与原始创建边相反。之后,每当一个新的边生成,就会自动生成一个反向的边。反向的边拥有与原始边相同的属性。同时,当原始的边有变更时,对应反向的边也同时会变更。

在TigerGraph系统中,反向的边可以大幅增加图查询的效率,特别是需要回溯的查询。

创建图

CREATE GRAPH 图名(
  -- 定义顶点类型
  顶点1 (PRIMARY_ID 主键 STRING, 属性1 STRING, 属性2 INT, 属性3 STRING),
  顶点2 (PRIMARY_ID 主键 STRING, 属性1 DOUBLE, 属性2 DATETIME),
  顶点3 (PRIMARY_ID 主键 STRING, 属性1 STRING),

  -- 定义边类型1 (FROM 起始顶点, TO 结束顶点),2 (FROM 起始顶点, TO 结束顶点),

  -- 定义索引
  索引名 ON 顶点(属性)
) 

导入数据

  1. 添加csv数据文件

  2. 创建映射关系JOB

CREATE LOADING JOB job名 FOR GRAPH 图名{
    DEFINE FILENAME 数据文件名;
    LOAD 数据文件名 TO EDGE 边名 VALUES
    -- 第7列,第2列
    ($7,$2,_,_,_,_,$0)
    -- 以什么符号作为分隔符,是否有表头,行尾以什么字符结束
    USING SEPARATOR=",",HEADER="FALSE",EOL="\n";
}
  1. 加载运行映射关系
RUN LOADING JOB job名 using f="文件路径"

编写查询

resultSet = SELECT vSet
-- FROM 后也可以是单独的点和边集
FROM startSet:s - (edgeTypes:e) -> targetTypes:t
-- 后续都可选
SAMPLE 随即采样
WHERE 条件过滤
ACCUM 基于边并行计算
POST-ACCUM基于点并行计算
HAVING 条件过滤
ORDER 排序
LIMIT 限制输出

tips:

  • ANY 表示图中的所有顶点,用于全局计算
  • person.* 表示图中的所有 person 类型的顶点。
  • PRINT 输出图结果

累加器Accumulators

定义累加器

-- 定义了一个名为 @@globalMax 的累加器,它的类型是 MaxAccum <INT>,是一种标量累加器,表示在累积过程中保留最大值。
MaxAccum <INT> @@globalMax;
-- 定义了一个名为 @tags 的累加器,它的类型是 SetAccum <String>,表示它是一个容器累加器,用于在查询过程中累积唯一的字符串值。
SetAccum <String> @ tags;

(1)Scaler Accumulator(标量累加器)

  • SumAccum #保留求和值

  • MinAccum / MaxAccum / AvgAccum #保留最小、最大、平均值

  • AndAccum / OrAccum #保留Bool值

  • BitwiseAndAccum / BitwiseOrAccum

  • CountAccum #用于计算累加项的数量

(2)Container Accumulators(容器累加器)

  • ListAccum > [ ]

  • SetAccum > ()

  • BagAccum > 无序容器

  • MapAccum > {}

  • ArrayAccum > 多维数组

  • HeapAccum > 堆排序

  • GroupByAccum > 复合累加器

ACCUM 面向边计算

 #1. 定义全局变量
AvgAccum @@avgIncome;
MinAccum<DOUBLE> @@minIncome;
MaxAccum<DOUBLE> @@maxIncome;

#2. 写查询
-- 在执行这个查询语句时,将选择符合条件的 "Customer" 顶点,并根据边 "salary_by" 的收入属性累加计算平均收入、最低收入和最高收入。查询的结果存储在名为 "Result" 的变量中
Result = SELECT cust
			FROM Customer:cust -(salary_by:e)-> Company:compWHERE cust.age BETWEEN 18 AND 50
      		ACCUM @@avgIncome += e.income,
                  @@minIncome += e.income,
                  @@maxIncome += e.income,

POST-ACCUM面向点集计算

SetAccum<EDGE> @@visRes;
SetAccum<VERTEX> @@invitedPersonNum;

invited_users = SELECT t
                    FROM users:s -(User_Refer_Users:e)- :t
                     WHERE t!= inputUser
                     -- 边集
                     ACCUM @@visRes += e
                     -- 点集
                     POST-ACCUM @@invitedPersonNum +=1;

流程控制语句

判断

IF condition THEN statements
[ELSE IF condition THEN statements]
[ELSE statements]
END
people = SELECT v FROM startingVertex -(friend:e)->:v
	ACCUM CASE v.gender
		WHEN 'Male' THEN @@males +=1
			WHEN 'Female' THEN @@females +=1
			ELSE @@unknown += 1
		END;

循环

WHILE condition [LIMIT (name|integer)] DO
	statements
END
FOREACH item IN RANGE[a,b].STEP(c) DO
    @@total += @@masterList[list];
END;   

集合操作

VSet1 = [1,2,3]
VSet2 = [3,4,5]
VSet3 = VSet1 `UNION` VSet2;    [1,2,3,4,5] #并集(去重)
VSet4 = VSet1 `INTERSECT` VSet2;     [3]   #交集
VSet5 = VSet1 `MINUS` VSet2;     [1,2]  #相减
举报

相关推荐

0 条评论