BigQuery初心者がデータ分析を始めてみた【第2回】ネイティブテーブルと外部テーブルの使い分け

BigQueryには、ネイティブテーブル外部テーブルの2種類のテーブルがあります。それぞれにメリット・デメリットがあり、用途に応じて使い分けることが重要です。

本記事では、実際に両方のテーブルを作成し、パフォーマンスやコストの違いを比較しながら、使い分けのポイントを解説します。

はじめに

【第1回】では、BigQueryの基本操作として、ネイティブテーブルの作成とクエリ実行を行いました。

BigQuery初心者がデータ分析を始めてみた【第1回】プロジェクト作成からクエリ実行まで - JBS Tech Blog

第2回では、外部テーブル(Googleスプレッドシート)を作成し、ネイティブテーブルとの違いを実際に確認していきます。

外部テーブルの作成

外部テーブルは、データを外部に保存したまま、BigQueryから参照できるテーブルです。今回はGoogleスプレッドシートを外部テーブルとして接続してみます。

スプレッドシートの準備

事前にGoogleスプレッドシートに、【第1回】と同じサンプルデータを貼り付けておきます。

外部テーブルの作成手順

【第1回】と同様に「テーブルを作成」をクリックし、以下を設定します。

  • テーブルの作成元: Google ドライブ
  • ドライブのURIを選択: スプレッドシートのURL
  • ファイル形式: Google スプレッドシート
  • テーブル名: 任意の名前(例: sales_data_sheet)
  • スキーマ: 自動検出

さらに「詳細オプション」を展開し、「スキップするヘッダー行」に1を設定します。ネイティブテーブルと同様に、スプレッドシートの1行目もヘッダーとして扱うため、スキップする必要があります。

これでスプレッドシートを外部テーブルとして接続できました。こちらもスキーマが自動的に認識されます。

作成されたテーブル

自動検出されたスキーマ

ネイティブテーブルと外部テーブルの比較

それぞれの特徴を比較してみました。

パフォーマンスの違い

同じクエリを両方のテーブルで実行してみたところ、ネイティブテーブルの方が明らかに高速でした。

ネイティブテーブルは160ミリ秒で実行が完了しました。

一方、スプレッドシート外部テーブルは1.51秒かかりました。

これは、ネイティブテーブルがBigQuery用に最適化された形式でデータを保存しているためです。わずか100行程度のデータでも、約9倍の速度差が生まれました。

コスト管理の違い

クエリ実行前の「このクエリで処理されるデータ量」の表示に、両者で大きな違いがありました。

ネイティブテーブルでは、クエリ実行前に5.63 KBと正確なスキャン量が表示されます。

これは、BigQueryがデータを列指向ストレージで管理しているため、実行前に正確なスキャン量を計算できるからです。

実行後も、実際に処理されたバイト数が確認できます。

一方、スプレッドシート外部テーブルでは、事前のスキャン量推定ができません

これは、外部データソース(スプレッドシート、Cloud Storage等)のデータサイズをBigQueryが事前に正確に把握できないためです。

実際にクエリを実行してみると、14.59 KBのデータが処理されていました。

この違いは、コスト管理の観点で重要です。ネイティブテーブルなら実行前にコストを見積もれますが、外部テーブルでは実行してみないとコストがわかりません。

スプレッドシート外部テーブルの利点

スプレッドシートを外部テーブルとして利用する最大の利点は、スプレッドシート上でデータを直接編集できることです。

試しにスプレッドシートの1行目のデータ(数量)を1から10に変更してみます。

変更後、同じクエリを再実行してみます。

SELECT *
FROM `プロジェクトID.test_dataset.sales_data_sheet`

変更前は数量が1でした。

変更後は数量が10に更新されていることがわかります。

スプレッドシートで編集した内容が即座に反映されました。この特性を活かせば、非エンジニアの方がスプレッドシートでデータを更新し、エンジニアがBigQueryで分析するといった協業が可能になります。

使い分けのポイント

テーブルタイプ メリット デメリット 用途例
ネイティブテーブル 高速、列指向で効率的、コスト予測可能 データ更新に手間 定期分析、大量データ処理
外部テーブル(スプレッドシート) GUI編集可能、非エンジニアも扱える 処理が遅い、コスト予測不可、大量データに不向き 小規模マスタデータ、手動更新データ
外部テーブル(Cloud Storage) 大量データ対応、他システムと共有可 データ更新が手間、コスト予測不可 ETL前データ、アーカイブ

定期的に分析するデータはネイティブテーブルに格納し、商品マスタなど非エンジニアが更新するデータはスプレッドシート外部テーブルとして扱うのが良さそうです。

まとめ

第2回では、ネイティブテーブルと外部テーブルの違いを実際に比較しました。

本記事で学んだポイントは以下の通りです。

  • ネイティブテーブルは高速(160ms)でコスト予測が可能
  • 外部テーブル(スプレッドシート)は低速(1.51秒)だがGUIで編集可能
  • コスト管理の観点では、ネイティブテーブルが事前見積もり可能で優位
  • 用途に応じて使い分けることが重要

次回【第3回】では、Google Trendsなどの公開データセットを活用し、パーティション分割によるコスト削減テクニックを解説します。

執筆担当者プロフィール
寺内 爽併

寺内 爽併(日本ビジネスシステムズ株式会社)

メディア・エンターテインメント本部インテグレーション部3G所属。 Google CloudやGoogle Workspaceを中心に扱っています。

担当記事一覧