11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BigQueryサブスクリプションを接続したテーブルのデータ型変更が本当に面倒くさかった

Last updated at Posted at 2024-10-02

はじめに

こんにちは、京セラコミュニケーションシステム 川村(@kccs_takahiro-kawamura)です。
みなさんはBigQueryサブスクリプションを利用していますか?
私はIoTデータを収集するプラットフォームを構築しているのですが、BigQueryにデータを保存するパイプラインとしてBigQueryサブスクリプションを採用することが多いです。
今回は、私がBigQueryサブスクリプションとBigQueryを運用している経験から本当に面倒に思ったBigQueryのデータ型の変更について、その手順と注意点を記載いたします。

本記事は2024年9月ごろに作成しております。よって、引用している文章などはこの時点での最新となります。ご了承ください。

本記事の対象者

  • BigQueryを利用している方
  • BigQueryサブスクリプションを利用している方、利用を検討している方

BigQueryサブスクリプションとは

BigQueryサブスクリプションとは、Pub/Subのサブスクリプションの一種でPub/Subで受信したメッセージをBigQueryに書き込むことができます。
ストリーミングでデータをBigQueryに書き込めるためIoTデータと相性がよく、書き込み前に加工処理が不要な場合はDataflowジョブよりもBigQueryサブスクリプションを採用するほうがオススメです。

BigQueryサブスクリプションを接続しているテーブルのデータ型変更

BigQueryのみのデータ型変更の記事と同様にデータ型の互換性の有無によって手順が異なります。

互換性のあるデータ型変更

BigQueryのデータ型変更はALTER文を実行するだけでできます。
しかしながら、BigQueryの変更を行いたいだけなのに、BigQueryサブスクリプションの変更も必要です。
BigQueryでは互換性のあるデータ型の変更でも、BigQueryサブスクリプションを利用する際に必要となるトピックスキーマでは互換性がありません。
手順にすると以下のとおりです。

  1. 対象のPub/Subにパブリッシュしているサービスを停止する

  2. BigQueryサブスクリプションの接続を解除する

  3. 対象のトピックスキーマを削除する
    ※ トピックスキーマはAvroスキーマを想定

  4. 新しい定義で同名のトピックスキーマを作成する

  5. ALTER文を実行し、対象のBigQueryテーブルのデータ型を変更する

  6. BigQueryサブスクリプションの編集ボタンを押下し、何も変更せずに更新ボタンを押下することで再接続する
    ※ 稀に更新ボタンを押下後に処理中のステータスから進まない場合があるため、その際はBigQueryサブスクリプションを削除して再作成する

  7. 停止したサービスを再開する

互換性のないデータ型変更

互換性がない場合は、上記の手順に加えてBigQueryのテーブルを再作成する必要があります。
手順にすると以下のとおりです。

  1. 対象のPub/Subにパブリッシュしているサービスを停止する

  2. BigQueryサブスクリプションの接続を解除する

  3. 対象のトピックスキーマを削除する

  4. 新しい定義で同名のトピックスキーマを作成する

  5. テーブルのコピーを作成する

  6. オリジナルのテーブルを削除する

  7. データ型を変更してテーブルを再作成する

  8. クエリ設定を行う
    query_setting.png

  9. クエリを実行する

    SELECT column1, CAST(column2 AS STRING) as column2, column3 FROM example_table_copy [WHERE パーティションの条件]
    
  10. BigQueryサブスクリプションの編集ボタンを押下し、何も変更せずに更新ボタンを押下することで再接続する

  11. 停止したサービスを再開する

BigQueryのテーブルのデータ型を変更したいだけなのに、複雑な手順になってしまいました。

まとめ

  • 互換性があるデータ型変更は、BigQueryサブスクリプションの変更をしてからALTER文を実行する
  • 互換性がないデータ型変更は、BigQueryサブスクリプションの変更してからテーブルを再作成する

どちらの場合もひと手間かかりますが、BigQueryサブスクリプションを用いてパイプラインを構築することで、構築にかかる時間やこれ以外の運用が削減できます。

次回の記事もお楽しみに!

おしらせ

弊社X(旧:Twitter)では、Qiita投稿に関する情報や各種セミナー情報をお届けしております。情報収集や学びの場を求める皆さん!ぜひフォローしていただき、最新情報を手に入れてください😄

11
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?