Mastering Structs
A little note before we start: It is expected you follow along in BigQuery so you see the output of all the queries shown here.
Structs and JSON
Structs are lists of key-value pairs with a fixed length. They are a rather simple concept: you come up with some names for the fields and assign some values. We’ll see later that we can use them to introduce columns in sub-tables. But first things first …
One way to define a struct is using struct() function:
SELECT
STRUCT(42 AS a, 'hello world' as b)
The JSON representation looks as follows:
{
"a" : "42",
"b" : "hello world"
}
Defining anonymous structs is also possible and may come in handy sometimes:
SELECT (45, 6, 'abc')
These statements do not define the type of the fields - if you want to learn about that please read the GCP docs.
Example
In this example we create a one-row temporary table using WITH and select an element from the struct:
WITH table AS (
SELECT
STRUCT(4 AS a, 5 AS b) AS field
)
SELECT
field.a
FROM
table
Try it out!
Multiple Levels
You can also nest structs within structs:
WITH table AS (
SELECT
STRUCT(
4 AS a,
5 AS b,
STRUCT('red' as color, 5 as amount) as level2
) AS level1
)
SELECT
level1.level2.*
--,level1.*
--,*
FROM
table
Try it out! Uncomment to see the difference when querying for different levels.
Structs in Tables
In BigQuery table schemas structs are called RECORD
. You can see in the following rows which fields belong to the struct.
Be careful! RECORD
does not mean array!