STRUCT
) SELECT AS STRUCT
를 이용하여 STRUCT를 ARRAY에 넣어야 함SELECT [a,b,c] AS X
or SELECT ARRAY<INT64>[1,2,3]
Row | ARRAY_값 | ARRAY_num |
---|---|---|
1 | a | 1 |
b | ||
c |
GENERATE_ARRAY(start, end, step)
GENERATE_DATE_ARRAY
GENERATE_TIMESTAMP_ARRAY
ARRAY_LENGTH
UNNEST
WITH OFFSET
(인덱스) 이용하여 ORDER BY
진행CROSS JOIIN
을 이용 (SELECT ARRAY_AGG(item.item_category) FROM UNNEST(items) AS item)AS category
할 경우, items와 엮이지 않는 event_name의 다른 select 값들은 문제 없이 나옴 WITH sequences AS
(SELECT 1 AS id, [0, 1, 1, 2, 3, 5] AS some_numbers
UNION ALL SELECT 2 AS id, [2, 4, 8, 16, 32] AS some_numbers
UNION ALL SELECT 3 AS id, [5, 10] AS some_numbers)
SELECT id, flattened_numbers
FROM sequences
CROSS JOIN UNNEST(sequences.some_numbers) AS flattened_numbers;
--FROM sequences, sequences.some_numbers AS flattened_numbers; 한 줄로도 가능함
id | flattened_numbers |
---|---|
1 | 0 |
1 | 1 |
1 | 1 |
1 | 2 |
1 | 3 |
1 | 5 |
2 | 2 |
2 | 4 |
2 | 8 |
2 | 16 |
2 | 32 |
3 | 5 |
3 | 10 |
OFFSET
vsORDINAL
- 0부터 시작하는 Index
OFFSET
- 1부터 시작하는 Index
ORDINAL
ARRAY_AGG
OVER
를 함께 사용할 경우 행 그룹에 대해 값을 계산 한 후, 각 행별로 결과를 반환하는 WINDOW 함수로 됨IGNORE NULLS
를 추가하여 NULL을 제외하고 연산함SELECT ARRAY_AGG(DISTINCT x IGNORE NULLS LIMIT 5) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;
-- ORDER BY도 사용 가능함
SELECT ARRAY_AGG(DISTINCT x ORDER BY x) AS array_agg
array_agg |
---|
[2, 1, -2, 3] |
배열의 N번째 값을 가져오고 싶은 경우 OFFSET, ORDINAL을 사용할 수 있음
OFFSET : 0부터 시작
ORDINAL : 1부터 시작
존재하지 않는 N을 지정하면 에러가 발생하는데, 이럴 경우 SAFE_를 앞에 붙여주면(SAFE_OFFSET, SAFE_ORDINAL) 에러가 발생하지 않고 NULL이 return됨
ARRAY_LENGTH
WHERE EXISTS
(
SELECT *
FROM UNNEST(example_data.preferred_language) as prefer_lang
WHERE prefer_lang IN ('Go','Scala')
)
()
사용2.STRUCT<>
사용
SELECT STRUCT<지정이름1 INT64, 지정이름2 INT64, 지정이름3 STRING>(10, 20, 'BQ') AS new_struct
SELECT STRUCT<10 AS 지정이름1, 20 AS 지정이름2, 'BQ' AS 지정이름3) AS new_struct
SELECT
COUNT(hits.product.v2ProductName),
FROM
[foo-160803:123456789.ga_sessions_20170101]
WHERE
hits.ecommerceaction.action_type = '2'
AND ( BOOLEAN(hits.product.isImpression) IS NULL OR BOOLEAN(hits.product.isImpression) == FALSE )
The number of milliseconds after the visitStartTime when this hit was registered. The first hit has a hits.time of 0
The quantity of the product purchased.