SELECT¶
Syntax¶
Parameters¶
selectExpression
This can be a column, a column inside a
STRUCT
, or an expression
label
Label to use for the projection expression. The label will be the only way to access this expression at higher scopes
Examples¶
To start, suppose we have the following table:
CREATE TYPE AS STRUCT restaurant_review (reviewer STRING, rating INT64);
CREATE TABLE restaurant (
rest_no INT64,
name STRING,
reviews restaurant_review ARRAY,
PRIMARY KEY(rest_no));
and the following records:
{"REST_NO": 42, "name": "Restaurant1", "reviews":
[{"reviewer": "Reviewer11", "rating": 2},
{"reviewer": "Reviewer22", "rating": 5},
{"reviewer": "Reviewer21", "rating": 1}]}
{"REST_NO": 43, "name": "Restaurant2", "reviews":
[{"reviewer": "Reviewer19", "rating": 1}]}
{"REST_NO": 44, "name": "Restaurant3", "reviews":
[{"reviewer": "Reviewer41", "rating": 3},
{"reviewer": "Reviewer55", "rating": 5}]}
{"REST_NO": 45, "name": "Restaurant4", "reviews":
[{"reviewer": "Reviewer14", "rating": 3},
{"reviewer": "Reviewer55", "rating": 2}]}
Projecting all columns¶
It is possible to query a table using normal select
with optional predicates. For example:
SELECT * FROM restaurant;
|
|
|
---|---|---|
|
|
[{"reviewer": "Reviewer11","rating": "2"},
{"reviewer": "Reviewer22","rating": "5"},
{"reviewer": "Reviewer21","rating": "1"}]
|
|
|
[{"reviewer": "Reviewer19","rating": "1"}]
|
|
|
[{"reviewer": "Reviewer41","rating": "3"},
{"reviewer": "Reviewer55","rating": "5"}]
|
|
|
[{"reviewer": "Reviewer14","rating": "3"},
{"reviewer": "Reviewer55","rating": "2"}]
|
Note how *
resolves all the attributes (top-level fields) of table restaurant
and returns them as individual columns in the
result set.
Projecting one column¶
It is also possible to project individual columns from a table, for example, suppose we want to only project restaurant names:
select name from restaurant
|
---|
|
|
|
|
Projecting column inside nested a nested STRUCT
¶
It is also possible to project a nested field provided non of its parents is repeated:
CREATE TYPE AS STRUCT A ( b B );
CREATE TYPE AS STRUCT B ( c C );
CREATE TYPE AS STRUCT C ( d D );
CREATE TYPE AS STRUCT D ( e E );
CREATE TYPE AS STRUCT E ( f int64 );
CREATE TABLE tbl1 (id int64, c C, a A, PRIMARY KEY(id));
SELECT a.b.c.d.e.f FROM tbl1;