GQL within SQL

GoogleSQL for Spanner supports the following syntax to use GQL within SQL queries.

Language list

Name Summary
GRAPH_TABLE operator Performs an operation on a graph in the FROM clause of a SQL query and then produces a table with the results.

GRAPH_TABLE operator

FROM GRAPH_TABLE ( property_graph_name 
 multi_linear_query_statement 
) [ [ AS ] alias 
]

Description

Performs an operation on a graph in the FROM clause of a SQL query and then produces a table with the results.

With the GRAPH_TABLE operator, you can use the GQL syntax to query a property graph. The result of this operation is produced as a table that you can use in the rest of the query.

Definitions

  • property_graph_name : The name of the property graph to query for patterns.
  • multi_linear_query_statement : You can use GQL to query a property graph for patterns. For more information, see Graph query language .
  • alias : An optional alias, which you can use to refer to the table produced by the GRAPH_TABLE operator elsewhere in the query.

Examples

You can use the RETURN statement to return specific node and edge properties. For example:

  SELECT 
  
 name 
 , 
  
 id 
 FROM 
  
 GRAPH_TABLE 
 ( 
  
 FinGraph 
  
 MATCH 
  
 ( 
 n 
 : 
 Person 
 ) 
  
 RETURN 
  
 n 
 . 
 name 
  
 AS 
  
 name 
 , 
  
 n 
 . 
 id 
  
 AS 
  
 id 
 ); 
 /*-----------+ 
 | name | id | 
 +-----------+ 
 | Alex | 1  | 
 | Dana | 2  | 
 | Lee  | 3  | 
 +-----------*/ 
 

You can use the RETURN statement to produce output with graph pattern variables. These variables can be referenced outside GRAPH_TABLE . For example,

  SELECT 
  
 n 
 . 
 name 
 , 
  
 n 
 . 
 id 
 FROM 
  
 GRAPH_TABLE 
 ( 
  
 FinGraph 
  
 MATCH 
  
 ( 
 n 
 : 
 Person 
 ) 
  
 RETURN 
  
 n 
 ); 
 /*-----------+ 
 | name | id | 
 +-----------+ 
 | Alex | 1  | 
 | Dana | 2  | 
 | Lee  | 3  | 
 +-----------*/ 
 

The following query produces an error because id isn't included in the RETURN statement, even though this property exists for element n :

  SELECT 
  
 name 
 , 
  
 id 
 FROM 
  
 GRAPH_TABLE 
 ( 
  
 FinGraph 
  
 MATCH 
  
 ( 
 n 
 : 
 Person 
 ) 
  
 RETURN 
  
 n 
 . 
 name 
 ); 
 

The following query produces an error because directly outputting the graph element n is not supported. Convert n to its JSON representation using the SAFE_TO_JSON for successful output.

  -- Error 
 SELECT 
  
 n 
 FROM 
  
 GRAPH_TABLE 
 ( 
  
 FinGraph 
  
 MATCH 
  
 ( 
 n 
 : 
 Person 
 ) 
  
 RETURN 
  
 n 
 ); 
 
  SELECT 
  
 SAFE_TO_JSON 
 ( 
 n 
 ) 
  
 as 
  
 json_node 
 FROM 
  
 GRAPH_TABLE 
 ( 
  
 FinGraph 
  
 MATCH 
  
 ( 
 n 
 : 
 Person 
 ) 
  
 RETURN 
  
 n 
 ); 
 /*---------------------------+ 
 | json_node                 | 
 +---------------------------+ 
 | {"identifier":"mUZpbk...} | 
 | {"identifier":"mUZpbk...} | 
 | {"identifier":"mUZpbk...} | 
 +--------------------------*/ 
 
Create a Mobile Website
View Site in Mobile | Classic
Share by: