はじめに
こんにちは、京セラコミュニケーションシステム 川村(@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サブスクリプションを利用する際に必要となるトピックスキーマでは互換性がありません。
手順にすると以下のとおりです。
-
対象のPub/Subにパブリッシュしているサービスを停止する
-
BigQueryサブスクリプションの接続を解除する
-
対象のトピックスキーマを削除する
※ トピックスキーマはAvroスキーマを想定 -
新しい定義で同名のトピックスキーマを作成する
-
ALTER文を実行し、対象のBigQueryテーブルのデータ型を変更する
-
BigQueryサブスクリプションの編集ボタンを押下し、何も変更せずに更新ボタンを押下することで再接続する
※ 稀に更新ボタンを押下後に処理中のステータスから進まない場合があるため、その際はBigQueryサブスクリプションを削除して再作成する -
停止したサービスを再開する
互換性のないデータ型変更
互換性がない場合は、上記の手順に加えてBigQueryのテーブルを再作成する必要があります。
手順にすると以下のとおりです。
-
対象のPub/Subにパブリッシュしているサービスを停止する
-
BigQueryサブスクリプションの接続を解除する
-
対象のトピックスキーマを削除する
-
新しい定義で同名のトピックスキーマを作成する
-
テーブルのコピーを作成する
-
オリジナルのテーブルを削除する
-
データ型を変更してテーブルを再作成する
-
クエリを実行する
SELECT column1, CAST(column2 AS STRING) as column2, column3 FROM example_table_copy [WHERE パーティションの条件]
-
BigQueryサブスクリプションの編集ボタンを押下し、何も変更せずに更新ボタンを押下することで再接続する
-
停止したサービスを再開する
BigQueryのテーブルのデータ型を変更したいだけなのに、複雑な手順になってしまいました。
まとめ
- 互換性があるデータ型変更は、BigQueryサブスクリプションの変更をしてからALTER文を実行する
- 互換性がないデータ型変更は、BigQueryサブスクリプションの変更してからテーブルを再作成する
どちらの場合もひと手間かかりますが、BigQueryサブスクリプションを用いてパイプラインを構築することで、構築にかかる時間やこれ以外の運用が削減できます。
次回の記事もお楽しみに!
おしらせ
弊社X(旧:Twitter)では、Qiita投稿に関する情報や各種セミナー情報をお届けしております。情報収集や学びの場を求める皆さん!ぜひフォローしていただき、最新情報を手に入れてください😄