Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BigQuery経由で使うGoogleスプレッドシートのスキーマ管理

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 BigQuery経由で使うGoogleスプレッドシートのスキーマ管理

Avatar for Takashi Masuda

Takashi Masuda

July 21, 2022
Tweet

More Decks by Takashi Masuda

Other Decks in Technology

Transcript

  1. BigQueryのデータソース 種別 メカニズム データソース/データ ベース 形式 BigQueryストレージ 外部データソース 外部テーブル Bigtable

    Cloud Storage (GCS) CSV, JSON など Googleドライブ カンマ区切り値(CSV) JSON(改行区切り) Avro スプレッドシート 連携クエリ Cloud Spanner Cloud SQL 外部データソースの概要 | BigQuery | Google Cloud
  2. BigQuery経由で使った場合の比較 BigQueryストレージ Googleスプレッドシート ビジネスユー ザーがデータを 更新可能 難しい 簡単 ビジネスユー ザーがスキーマ

    を変更可能 難しい 例えば列を挿入すると、クエ リエラーになる 扱えるデータ量 気にしなくて良い 上限1,000万セルだが、実際 は数万行でクエリタイムアウ トなどが発生し始める Google ドライブに保管可能なファイル - Google ドライブ ヘルプ
  3. 課題 • スキーマの変更履歴をGitに記録できない ◦ なぜ変更したのか?をあとから追跡しづらい • スキーマを破壊的に変更しづらい ◦ 一度作ったテーブルのカラムは変更や削除が出来ない。追加なら出来る ◦

    例えばあるカラムを削除したくなった時は、変更したいテーブルと同じスキーマのテーブル を作りつつ、削除したいカラムは含めないようにする ◦ その後、LookMLからのテーブル参照を切り替える
  4. bq CLIを使う 1. データセットの作成 ◦ $ bq mk <dataset_name> ◦

    例: $ bq mk masterdata 2. 外部テーブルの作成 ◦ $ bq mk --external_table_definition=./define.json <dataset_name>.<table_name> ◦ 例: $ bq mk --external_table_definition=./define.json masterdata.gsheet
  5. ポイント • bq CLIを使う ◦ ローカルにCloud SDKをインストールすれば使える ▪ Cloud SDK

    のインストール | Google Cloud ◦ macOSなら $ brew install --cask google-cloud-sdk でのインストールが楽かも • スキーマ定義をdefine.jsonで管理する ◦ 例: https://gist.github.com/masutaka/142ca20b802401d12012fe952f2ea1f3
  6. 宣伝など • 割とニッチなLookerのブログ記事を書いています🔥 ◦ Looker カテゴリーの記事一覧 - Feedforce Developer Blog

    • ソフトウェア開発の経験を生かしたLookML開発を続けて いますが、ずっとボッチなので一度誰かと意見交換など してみたいです🙏 ◦ 特にLookMLのレイヤー化の話は試行錯誤中で興味あります
  7. SQLのビューを間に挟む例 例えば、全カラムnullのレコードが急に出てくることがある。primary_keyがnullになり得るので避けた いところ。LookMLの派生テーブルでも解決出来るが、BigQueryの責務にしたほうがLookMLをシンプル に保てると思う。 # SQLのビューとして、例えばこんなSQLのファイルを用意する $ cat all_data_view.sql SELECT

    DISTINCT * FROM `project_name.masterdata.gsheet` WHERE id IS NOT NULL $ bq mk --use_legacy_sql=false --view "$(cat all_data_view.sql)" masterdata.all_data_view # LookML → SQLのビュー → 外部テーブル 人間が作るテーブルでありがちな、ピボットされたテーブルのピボット解除もSQLのビューでやると良い 気がする。