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 theGRAPH_TABLEoperator 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...} | 
 +--------------------------*/ 
 
 

