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