---
title: 【BigQuery】ARRAY,UNNESTって一体なに？
description: BigQuery特有のデータ型ARRAYと、ARRAY型のカラムを分解し、扱いやすいテーブル構造にするUNNEST演算子について解説します
---

[コラム | CARTA ZERO Analytics ](https://analytics.cartazero.co.jp/column)

# [【BigQuery】ARRAY,UNNESTって一体なに？](https://analytics.cartazero.co.jp/column/post/bigquery-array-and-unnest)

 作成者: [寺田　将志](https://analytics.cartazero.co.jp/column/author/寺田-将志)｜Oct 28, 2024 12:00:00 AM

 

こんにちは。CCIのアナリティクス担当の寺田です。

 

BigQueryのデータ型、ARRAY型, STRUCT型は慣れれば便利ですが、最初はどう扱っていいか困りませんか？

特にGA4 <---> BigQueryを連携し、BigQueryにエクスポートされてきたGA4アクセスログを分析しよう！とした時、最初にぶつかる壁ではないでしょうか。(N=1, 自分です)

 

今回は、

- 1)ARRAY型の紹介
- 2)**UNNEST演算子**の使いどころ

の2つをざっくりご紹介したいと思います。

 

(ちなみにSTRUCT型についての詳しい記事は👉[こちら](https://analytics.cartazero.co.jp/column/post/bigquery-struct))

 

 

## ARRAY型

### 定義：同じデータ型の複数の値をまとめて格納できるデータ構造

(※ただし値としてARRAYを入れ込むことは出来ない)

[BigQuery公式ドキュメント:Array_type](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#array_type)

 

 

### BigQueryで頻出するARRAY構造の例

```
--ユーザーごとに購入したitem_idの一覧を作成するサンプルクエリWITH array_sample AS (  SELECT 'A1' AS user_id, [101, 102, 103, 104] AS item_ids  UNION ALL  SELECT 'A2' AS user_id, [201, 202, 203, 204, 205] AS item_ids  UNION ALL  SELECT 'A3' AS user_id, [301, 302] AS item_ids)SELECT user_id, item_idsFROM array_sampleORDER BY user_id;
```

ecommerce設定をしているGA4ログデータを処理していると、よくこの形でARRAYが出てきます。

 

 

(ちなみにARRAYの作成方法は、[値1, 値2,.........]のように[]で値を囲うと作成できます。

注意点としては、格納する値のデータ型を統一しないとエラーが出ます。今回の例だと格納する値のデータ型はINTEGER(INT64)に統一しています。)　

[BigQuery公式ドキュメント:Constructing an array](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#constructing_an_array)

 

 

### クエリ結果

A1さん、A2さん、A3さん分で3レコード出力されます。

(※決して11レコードあるわけではありません)

 

## **UNNEST演算子の使いどころ**

UNNEST演算子は、上記のようなARRAY型のカラム(=item_ids)に対して力を発揮します！

 

使いどころとしてはARRAY型のカラム使いにくい！普通のテーブルが欲しい！というケースで使います。

今回の例だと「item_idごとにどのくらいの購入UUがいるのか」、このままのテーブル構造だと集計できませんよね😇

 

 

### UNNEST演算子の特徴

 

✅引数として「FROM句で指定したソーステーブル」のARRAY型のカラムを取る

✅受け取ったARRAY内にある各値を、一組の行に変換（**フラット化**）する

✅CROSS JOINやLEFT JOINなどのJOIN句と併用される

 

### BigQueryで頻出するARRAY構造をフラット化するサンプルクエリ

```
--ユーザーごとに購入したitem_idの一覧を作成するサンプルクエリWITH array_sample AS (  SELECT 'A1' AS user_id, [101, 102, 103, 104] AS item_ids  UNION ALL  SELECT 'A2' AS user_id, [201, 202, 203, 204, 205] AS item_ids  UNION ALL  SELECT 'A3' AS user_id, [301, 302] AS item_ids)--<ARRAY>item_idsカラムを一組の行に変換（フラット化）するSELECT user_id, item_idFROM array_sampleCROSS JOIN UNNEST(item_ids) AS item_id;
```

 

 

上記サンプルクエリで起こっていることを順番に説明します。

1. UNNEST 演算子はFROM句で指定したソーステーブル(=array_sample)のARRAY型のカラム(=item_ids)を引数に取ります
2. 受け取ったARRAY(=item_ids)内にある各値を、一組の行に変換（フラット化）します
   
    
   
    
3. 一組の行に変換（フラット化）したitem_idカラムを、各レコードごとにCROSS JOINします

※正確にはここで行っているCROSS JOINは「相関CROSS JOIN」です

各行の他の列の値を維持したまま ARRAYをバラし、CROSS JOINしてくれます。

 

```
各行の他の列の値を維持したまま ARRAYをバラし、CROSS JOINしてくれます。
```

この表現がわかりにくいので、上の例で翻訳すると、

 

※「各行」→ユーザーA1さんの行とします

 

```
ユーザーA1さんの行に含まれているuser_idカラムの値(=A1)を維持したまま、ARRAY(=item_ids)をバラしCROSS JOINしてくれます
```

いずれ

- 相関CROSS JOIN
- 相関LEFT JOIN
- それぞれの挙動の違い

なども書く予定です(いつか......)

 

[BigQuery公式ドキュメント:Correlated join operation](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#correlated_join)

### クエリ結果

A1さん、A2さん、A3さん分で11レコード出力されます。

UNNEST演算子でARRAY(=item_ids)を行に変換し、無事フラット化できました！

 

例えば、item_idごとにどのくらいの購入UUがいるのかを調べるなど、こちらのテーブルのだと集計できそうです！

いかがだったでしょうか。今回は

- 1)ARRAY型の紹介
- 2)**UNNEST演算子**の使いどころ

をご紹介しました。

GA4アクセスログをBigQueryで分析する際には避けられない知識かと思います。

 

 

また社内の1st PartyデータをBigQueryに取り込むことにより、GA4アクセスログと1st Partyデータを横断する分析も可能になります。

(なにかしらの突合キーが必要になりますが)

 

- **GA4アクセスログと1st Partyデータを横断するためのキーの実装相談**
- **事業KPIに即したGA4に取り込むべきイベント設計/GTM設定**
- **BigQueryやGoogle Cloud製品を用いた各種分析とインサイトの発見**
- **社内の1st Partyデータを一元管理できるダッシュボード**
- **広告効果検証用ダッシュボード**

などなど、データ領域のご相談を幅広く承っております。

 

ここまで読んでいただきありがとうございました！😊

 

📣なお、私も含め、CCI Analyticsを担当するアナリストは現在は「[Data Dig（データディグ）](https://www.data-dig.cci.co.jp/ja-jp/)」というCookieに依存しないデジタルマーケティング展開の支援も行っています。そのサービスの詳細も「データマーケティング」という形でご案内しており、Data Dig関連サービスとしてどのような資料が存在するか、それらの資料ダウンロードを行えます。

また、デジタルマーケティングに関するコラムなどを展開しています。

 

[Data Dig（データディグ）](https://www.data-dig.cci.co.jp/ja-jp/)

📣CCIが提供する統合デジタルマーケティングサービスの全容、また現状のデジタルマーケティング施策のノウハウを認識されたい場合は、ぜひ近日オープンした「KnowHowNow」をご覧ください。

 

[KnowHowNow（ノウハウナウ）はこちらから](https://know-how-now.cci.co.jp/)

[完全な記事を表示](https://analytics.cartazero.co.jp/column/post/bigquery-array-and-unnest)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "寺田　将志"
  },
  "dateModified" : "2025-10-27T17:01:46.817Z",
  "datePublished" : "2024-10-28T00:00:00Z",
  "headline" : "【BigQuery】ARRAY,UNNESTって一体なに？",
  "image" : {
    "@type" : "ImageObject",
    "height" : 1565,
    "url" : "https://22681411.fs1.hubspotusercontent-na1.net/hubfs/22681411/AnalyticsCci_February2023/Image/%E3%80%90DA%E3%80%91array2.png",
    "width" : 2898
  },
  "mainEntityOfPage" : "https://analytics.cartazero.co.jp/column/post/bigquery-array-and-unnest",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60,
      "url" : "/hs/hsstatic/content_shared_assets/static-1.4092/img/default-amp-logo.png",
      "width" : 60
    },
    "name" : "Column - Analytics CARTA ZERO"
  }
}
```