BigQueryを試してみた

# 背景・目的
今まで、BigQueryをまともに触ってこなかったので、初歩的な知識を整理し、最後に簡単に動作を確認します。

# まとめ
特徴を整理します。

|特徴 | 説明|
|:--|:--|
|概要|サーバレスのDWH<BR>AI/ML、BIが組み込まれている|
|分析のUX|BigQuery Studioにより、統合されたインターフェイスを提供|
|コードサポート|SQL,Pythonを記述するためのコードサポート|
|柔軟性、コストパフォーマンス|複数のエディションがあり、ワークロードにより選択が可能。|
|組み込みML|MLが組み込まれており、構造/半構造/非構造の処理が可能|
|マルチクラウド|BigQuery Omni<BR>他のクラウドのデータを分析し、結果を1つの画面に表示して共有できる|
|リアルタイム|ストリーミングデータをクエリできる<BR>CDCによりデータをリアルタイムに取り込める|
|データの統合と管理|BigLakeにより、様々なデータ型の統合と探索、高度なモデルの構築が可能|
|BI|Looker Studio<BR>数回クリックするだけで分析情報を作成し共有可能|
|ガバナンスとセキュリティ|行レベル、列レベルでアクセス制御が可能<BR>暗号化も通信時、保管時にデフォルトで選択される|
|その他機能|地理空間分析が可能|
|料金|下記で料金が発生する。<BR>・コンピューティング<BR>・ストレージ<BR>・データの取り込み<BR>・データの抽出<BR>・ストリーミング読み取り|


# 概要
[データドリブンのイノベーションを推進するクラウド データ ウェアハウス](https://cloud.google.com/bigquery?hl=ja)をもとに整理します。

> BigQuery は、サーバーレスで費用対効果に優れたエンタープライズ データ ウェアハウスです。各種のクラウドで機能し、データに合わせたスケーリングも可能です。組み込みの ML / AI と BI を使用して、大規模な分析情報を取得できます。

- サーバレスのDWH
- AI/ML、BIが組み込まれている

下記の特徴がある。
> すべてのアナリティクス ユーザーのための統合されたエクスペリエンス
BigQuery Studio は、さまざまなコーディング スキルを持つすべてのデータ実務者のための単一の統合インターフェースを備え、データの取り込みと準備、データの探索と可視化、ML モデルの作成と使用に至る分析ワークフローを簡素化します。また、シンプルな SQL を使用して、特殊なモデルを扱うことを必要とせず、BigQuery 内で直接 Vertex AI の基盤モデルにアクセスし、感情分析やエンティティ抽出などの多くのテキスト処理タスクを実行できます。

- BigQuery Studio
    - 統合インターフェイス
    - Vertex AIの基盤モデルと統合されている

> BigQuery の Duet AI
BigQuery に統合された AI コラボレーターである BigQuery の Duet AI は、SQL や Python を記述するためのコンテキストに応じたコード サポートを提供します。関数、コードブロック、修正を自動的に提案します。チャット アシスタンスでは、自然言語を使用して特定のタスクの実行に関するリアルタイムのガイダンスを得ることができるため、ドキュメントを探すための時間を削減できます。詳しくは、Google Cloud の Duet AI をご覧ください。


- DuetAI
    - SQL,Pythonを記述するためのコードサポート

> 優れた柔軟性、予測可能な費用、最良のコスト パフォーマンス
BigQuery には複数のエディションがあり、個々のワークロード要件に合った機能セットを好きな組み合わせで選択できるので、適切なコスト パフォーマンスを実現できます。コンピューティング容量の自動スケーリングにより、ワークロードの需要に応じてコンピューティング リソースを詳細にリアルタイムで管理できます。費用が発生するのは、使用したコンピューティング容量分のみです。また、圧縮ストレージの料金設定により、データ使用量の増加とストレージ費用の削減が同時に実現します。

- 複数のエディションがある

> 組み込みの ML
BigQuery ML を使用すると、データ サイエンティストやデータ アナリストは、世界規模の構造化データ、半構造化データ、現在導入されている非構造化データに基づいた ML モデルを構築し運用化できます。これらのデータは BigQuery 内に直接格納され、シンプルな SQL を使用してごく短時間で処理できます。BigQuery ML モデルは、エクスポートして Vertex AI のオンライン予測や独自のサービスレイヤで使用できます。詳細については、現在サポートされているモデルをご覧ください。

- 組み込みのML
    - SQLで構造化/半構造化/非構造化を処理できる
    - BigQueryMLモデルは、エクスポートすることで、Vertex AIのオンライン予測や独自のサービスレイヤーで利用できる

> クラウド間でデータを分析し、共有する
BigQuery Omni は、フルマネージドのマルチクラウド分析ソリューションです。費用対効果の高い安全な方法でさまざまなクラウドのデータを分析し、結果を 1 つの画面に表示して共有できます。BigQuery Analytics Hub で、組織内および組織間で安全にデータアセットを交換し、商用、一般公開、Google のデータセットを使用して分析力を強化します。データ クリーンルームを作成、管理して、データの移動やコピーを必要とすることなく、プライバシーを重視した測定、データ共有、組織間でのコラボレーションを実現します。

- BigQuery Omni
    - フルマネージド分析ソリューション
    - 他のクラウドのデータを分析し、結果を1つの画面に表示して共有できる
- BigQuery Analytics Hub で、組織内および組織間で安全にデータアセットを交換し、商用、一般公開、Google のデータセットが使用できる
- クリーンルームも利用可能


> ストリーミング データ パイプラインによるリアルタイム分析
BigQuery には、ストリーミング データを取り込んで直ちにクエリできるようにする機能や、Dataflow などのストリーミング プロダクトとのネイティブなインテグレーションが組み込まれています。1 秒未満のクエリ レスポンス時間と高い同時実行性を実現するメモリ内分析サービスの BigQuery BI Engine では、大規模なデータセットをインタラクティブに分析できます。BigQuery マテリアライズド ビューを使用すると、環境内のクエリ パフォーマンスを強化して費用を削減できます。

- ストリーミングデータをクエリできる

> あらゆる種類のデータを統合、管理、統制する
BigQuery では、構造化、半構造化、非構造化のすべてのデータ型をクエリできます。BigLake を使用すると、さまざまなデータ型の統合と探索、高度なモデルの構築が可能です。さらに、信頼できるデータへのアクセスを可能にするインテリジェントなデータ ファブリック、Dataplex の一貫した制御によって、各種データレイク、データ ウェアハウス、データマートのデータを一元的に検出、管理、モニタリング、統制できます。

- BigLake
    - 様々なデータ型の統合と探索、高度なモデルの構築が可能
    - 高度なモデルの構築が可能
    - 信頼できるデータへのアクセスを可能にする

> 組み込みのビジネス インテリジェンスを使用して分析情報を共有する
組み込みのビジネス インテリジェンスにより、Looker Studio で数回クリックするだけで分析情報を作成して共有したり、Looker で BI を超えるデータリッチ エクスペリエンスを構築したりできます。コネクテッド シートを使うと、ピボット テーブル、グラフ、数式などの使い慣れたツールで Google スプレッドシート内の数十億行の BigQuery ライブデータを分析し、ビッグデータから簡単に分析情報を引き出せます。

- Looker Studio
    - 数回クリックするだけで分析情報を作成し共有可能

> データのガバナンスとセキュリティ
Google Cloud のセキュリティおよびプライバシーに関するサービスと BigQuery とのインテグレーションを通じて、セキュリティの強化および列レベルと行レベルでの詳細なガバナンス コントロールが実現します。データは保存時も転送時もデフォルトで暗号化されるため安心です。

- fine-grained acccess controlにより列と行のレベルでアクセス制御が可能
- 通信時、保管時の暗号化をデフォルトサポート

> BigQuery による地理空間分析
BigQuery の地理空間機能は、BigQuery のサーバーレス アーキテクチャと地理空間分析のネイティブ サポートを独自に組み合わせているため、ロケーション インテリジェンスを使用して従来の分析ワークフローを拡張できます。一般的な地理空間データ形式の任意の点、線、ポリゴン、マルチポリゴンをサポートしており、分析を簡易化して斬新な方法で空間データを可視化することで、新しいビジネスの可能性を切り拓きます。

- 地理空間分析のネイティブサポートを独自に組み合わせている
- ロケーションインテリジェンスを使用して従来の分析ワークフローを拡張できる

> リアルタイムの変更データ キャプチャとレプリケーション
Datastream を使用して、異種のデータベース、ストレージ システム、アプリケーションの間でデータを確実に、かつ最小限のレイテンシで同期できます。Datastream は目的に特化した拡張可能な Dataflow テンプレートと統合可能で、Cloud Storage に書き込まれた変更ストリームを pull し、リアルタイム分析用の最新の複製テーブルを BigQuery に作成できます。

- CDCを使って、BigQueryにリアルタイム連携する


## 一般的なユースケース
- BigQuery へのデータ転送
- リアルタイム分析
- 予測分析
- ログ分析
- マーケティング分析
- データ クリーンルーム

## 料金
:::note info
2024/2/2時点の情報に基づきます。
:::

> 無料枠
BigQuery の無料枠では、10 GiB のストレージ、1 か月あたり最大 1 TiB のクエリ、その他のリソースを無料でご利用いただけます。

- 10GiBのストレージ
- 1TiBのクエリ
- コンピューティング（分析）
    - オンデマンド
        - 最大2000個の同時実行スロットが提供される
        - 1つのプロジェクトで共有される
        - $6.25
    - standard
        - 標準SQL分析に適している
        - スロット時間あたり$0.04
        
    - Enterprise
        - 高度なエンタープライズ分析
        - スロット時間あたり$0.06
    
    - Enterprise Plus
        - ミッションクリティカル
        - スロット時間あたり$0.10
- ストレージ
    - アクティブなローカル ストレージ
        - $0.02
    - 長期の論理ストレージ
        - $0.01
    - アクティブな物理ストレージ
        - $0.04
    - 長期の物理ストレージ
        - $0.02

- データの取り込み
    - バッチ取り込み
        - GCSからの取り込み
        - 無料
    - ストリーミング
        - $0.01/200MiB
    - BigQuery Storage Write API
        - $0.025
- データの抽出
    - バッチエクスポート
        - GCSへエクスポート
        - 無料
- ストリーミング読み取り
    - Storage Read APIを使用する
    - $1.10/1TiB

# 実践
[BigQuery サンドボックスを有効にする](https://cloud.google.com/bigquery/docs/sandbox?hl=ja)を元に試してみます。

## BigQuery サンドボックスの使用を開始する
1. GCPコンソールでBigQueryを選択します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fe7291e0-85f1-6dc2-ab5a-35666b7ab547.png)

1. 画面左上でプロジェクトを選択すると、ポップアップされるので「新しいプロジェクト」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/25874c71-0904-66b8-a264-50b6786f169b.png)

1. 下記を入力し、「作成」をクリックします
    - プロジェクト名：任意
    - ロケーション：適宜選択してください
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/3bc08f77-ae98-1192-23dd-42fb902f8e1d.png" width=400 />

1. 作成されました
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/213f2e05-6ab5-4ac6-608b-6d5a54503557.png" width=400 />

1. 課金が有効になっていないのでサンドボックス扱いのようです。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ad24f58a-b758-9b5c-e532-f7e538e92784.png)

## Google Cloud コンソールを使用して一般公開データセットに対してクエリを実行
[Google Cloud コンソールを使用して一般公開データセットに対してクエリを実行](https://cloud.google.com/bigquery/docs/quickstarts/query-public-dataset-console?hl=ja)を元に試します。

1. エクスプローラーで「+追加」をクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/168da33c-78e2-457a-7be2-189092dfa16a.png" width=300 />

1. 「public datasets」＞「公開データセット」を選択します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f342a965-6230-837b-830c-8a9ce5c82831.png)


### 一般公開データセットを開く
1. サーチコンソールに「usa names」を入力し、使用します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/c10fc7ca-03a1-b5d8-e1a5-5f49f86cc712.png)

1. 「データセットを表示」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2dd0fec6-66b5-5616-08bd-ea1d4458391a.png)

1. 表示されました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/7cf8d647-ae0c-d7e1-12e1-ce37245f087c.png)

### 一般公開データセットに対してクエリを実行する
1. エディタに下記のクエリを貼り付けて実行します
    ```
    SELECT
      name,
      SUM(number) AS total
    FROM
      `bigquery-public-data.usa_names.usa_1910_2013`
    GROUP BY
      name
    ORDER BY
      total DESC
    LIMIT
      10;
    
    ```
1. 結果がでました。「James」さんが最も多いようですね
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/df9e0102-f401-e4ef-6ead-34b36420ef07.png)


### クリーンアップ
最後にプロジェクトを削除します。
1. リソースの管理に移動します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/326cf463-54eb-0775-5b8f-55ce5f61f967.png)
1. プロジェクトの一覧が表示されるので削除します
1. プロジェクトIDを入力し、「このままシャットダウン」をクリックします。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/1034e64b-22ae-bacc-6cd2-ff05c94b69e0.png" width=300 />
1. ポップアップが表示されました。すぐに削除されるわけではないのですね。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2a9b789b-6554-76f3-ef03-cbdaeffca1f0.png)


# 考察
今回、BigQueryについて特徴を整理し、サンドボックスでクエリを実行してみました。サンドボックスではキャパシティなど設定せずにすぐにチュートリアルができるのは良いですね。
今後も少しづつ触っていこうと思います。

# 参考
https://cloud.google.com/bigquery?hl=ja