cookbook/ GSQL Snippets
Last Updated: October 20, 2018A collection of commented GSQL patterns for schema, loading, and queries.
GSQL Code Cookbook
This section provides production-ready GSQL snippets with detailed comments explaining the syntax and logic.
1. Schema Definition Patterns
Basic Schema with Attributes
gsqlterminalCREATE VERTEX User (PRIMARY_ID id STRING, name STRING, age INT) WITH STATS="OUTDEGREE_BY_EDGETYPE" CREATE VERTEX Post (PRIMARY_ID id STRING, content STRING, created_at DATETIME) CREATE DIRECTED EDGE FOLLOWS (FROM User, TO User, connect_day DATETIME) CREATE UNDIRECTED EDGE AUTHORED (FROM User, TO Post) CREATE GRAPH SocialGraph (*)
Map and List Attributes
gsqlterminal// Using collections inside a vertex CREATE VERTEX Company ( PRIMARY_ID id STRING, name STRING, metadata MAP<STRING, STRING>, // Store dynamic key-value pairs tags LIST<STRING> // Store multiple labels )
2. Data Loading Patterns
Loading from CSV
gsqlterminalCREATE LOADING JOB load_social FOR GRAPH SocialGraph { DEFINE FILENAME file1 = "/path/to/users.csv"; LOAD file1 TO VERTEX User VALUES($0, $1, $2) USING SEPARATOR=",", HEADER="true", EOL="\n"; LOAD file1 TO EDGE FOLLOWS VALUES($0, $3, $4); }
Loading with Data Transformation
gsqlterminalCREATE LOADING JOB load_posts FOR GRAPH SocialGraph { DEFINE FILENAME f; // Using gsql_upper to normalize data during load LOAD f TO VERTEX Post VALUES($0, gsql_upper($1), $2); }
3. Query Patterns: The Power of Accumulators
Summing Neighbors (The Counter Pattern)
gsqlterminalCREATE QUERY follower_count(VERTEX<User> u) FOR GRAPH SocialGraph { SumAccum<INT> @@follower_count; Start = {u}; // Hop to followers and increment global counter Followers = SELECT t FROM Start:s -(FOLLOWS:e)-> User:t ACCUM @@follower_count += 1; PRINT @@follower_count; }
Finding Top-K (The Leaderboard Pattern)
gsqlterminalCREATE QUERY top_influencers(INT k) FOR GRAPH SocialGraph { // HeapAccum sorts by the first parameter (INT) in descending order (DESC) HeapAccum<UserScore>(k, score DESC) @@top_k; TYPEDEF TUPLE<VERTEX<User> u, INT score> UserScore; SumAccum<INT> @influence_score; Users = {User.*}; // Calculate scores based on outdegree Result = SELECT s FROM Users:s ACCUM s.@influence_score = s.outdegree("FOLLOWS") POST_ACCUM @@top_k += UserScore(s, s.@influence_score); PRINT @@top_k; }
Breadth-First Search (BFS)
gsqlterminalCREATE QUERY find_friends_at_distance(VERTEX<User> source, INT dist) FOR GRAPH SocialGraph { OrAccum @visited = false; SetAccum<VERTEX<User>> @@current_layer; Start = {source}; Start = SELECT s FROM Start:s ACCUM s.@visited = true; WHILE Start.size() > 0 AND dist > 0 DO Start = SELECT t FROM Start:s -(FOLLOWS:e)-> User:t WHERE t.@visited == false ACCUM t.@visited = true; dist = dist - 1; END; PRINT Start; // Returns vertices at exactly 'dist' hops }
4. Vector Search & Similarity
Cosine Similarity Search
gsqlterminalCREATE QUERY vector_search(LIST<DOUBLE> target_vector, INT top_k) FOR GRAPH SocialGraph { // Use Cosine Similarity via GSQL built-in or custom expression HeapAccum<Result>(top_k, sim DESC) @@top_results; TYPEDEF TUPLE<VERTEX<User> u, DOUBLE sim> Result; Users = {User.*}; Result = SELECT s FROM Users:s ACCUM @@top_results += Result(s, cosine_similarity(s.embedding, target_vector)); PRINT @@top_results; }
[!TIP] Always use
POST_ACCUMwhen you need to perform actions after the traversal, such as populating aHeapAccumor updating vertex attributes based on aggregated values.
On this page
- GSQL Code Cookbook
- 1. Schema Definition Patterns
- Basic Schema with Attributes
- Map and List Attributes
- 2. Data Loading Patterns
- Loading from CSV
- Loading with Data Transformation
- 3. Query Patterns: The Power of Accumulators
- Summing Neighbors (The Counter Pattern)
- Finding Top-K (The Leaderboard Pattern)
- Breadth-First Search (BFS)
- 4. Vector Search & Similarity
- Cosine Similarity Search
TigerGraph Book
v1.0 Curated