@NEST and @UNNEST Directives

Directives @nest and @unnest specify nesting and unnesting (flattening) of intermediate objects in both table function as well as in duality-view definition.

Directive @unnest corresponds to SQL keyword UNNEST (there's no keyword NEST in SQL corresponding to directive @nest). The following are the restrictions when using these two directives:
  • You cannot unnest a field that has an alias.

  • When using for duality-views, you cannot nest fields that correspond to identifying columns of the root table (primary-key columns, identity columns, or columns with a unique constraint or unique index).

You can use the following code to unnest the details of the team in the drivers object:
SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
    driver {
        driverId: driver_id
        driverName: name
        driverPoints: points
        team @unnest {
            teamId: team_id
            teamName: name
            teamPoints: points
        }
    }
');
This code produces the following output:
DATA                                                                           
--------------------------------------------------------------------------------
{                                                                              
  "driverId" : 101,                                                            
  "driverName" : "Lando Norris",                                               
  "driverPoints" : 282,                                                        
  "teamId" : 301,                                                              
  "teamName" : "McLaren Mercedes",                                             
  "teamPoints" : 666                                                           
}                                                                              
                                                                                 
{                                                                              
  "driverId" : 102,                                                            
  "driverName" : "Oscar Piastri",                                              
  "driverPoints" : 384,                                                        
  "teamId" : 301,                                                              
  "teamName" : "McLaren Mercedes",                                             
  "teamPoints" : 666                                                           
}                                                                              
                                                                                 
{                                                                              
  "driverId" : 103,                                                            
  "driverName" : "Charles Leclerc",                                            
  "driverPoints" : 312,                                                        
  "teamId" : 302,                                                              
  "teamName" : "Ferrari",                                                      
  "teamPoints" : 652                                                           
}                 
...................................
...................................
...................................
20 rows selected.
The following code shows the usage of @nest directive where you can nest the points of team in the previous query:
SELECT JSON_SERIALIZE(data PRETTY) AS data FROM GRAPHQL('
    driver {
        driverId: driver_id
        driverName: name
        driverPoints: points
        team @unnest {
            teamId: team_id
            teamName: name
            teamPoints @nest {
                points
            }
        }
    }
');
You can see the points field nested in the following output:
DATA                                                                           
--------------------------------------------------------------------------------
{                                                                              
  "driverId" : 101,                                                            
  "driverName" : "Lando Norris",                                               
  "driverPoints" : 282,                                                        
  "teamId" : 301,                                                              
  "teamName" : "McLaren Mercedes",                                             
  "teamPoints" :                                                               
  {                                                                            
    "points" : 666                                                             
  }                                                                            
}                                                                              
                                                                                 
{                                                                              
  "driverId" : 102,                                                            
  "driverName" : "Oscar Piastri",                                              
  "driverPoints" : 384,                                                        
  "teamId" : 301,                                                              
  "teamName" : "McLaren Mercedes",                                             
  "teamPoints" :                                                               
  {                                                                            
    "points" : 666                                                             
  }                                                                            
}              
....................................
....................................
....................................
20 rows selected.

Detailed example where @unnest directive is used in creating JSON-Relational Duality View can be found here.