🐈‍⬛

バッチ SQL トランスレータが使いやすくなりました

2023/12/21に公開

はじめに

こんにちは、クラウドエース データ ML ディビジョン所属の大城です。
クラウドエースの IT エンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータ ML ディビジョンになります。

データ ML ディビジョンでは活動の一環として、毎週 Google Cloud の新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。その中でも重要と考えるリリースを本ページ含め記事として公開しています。

今回で 2 本目の記事執筆となります。よろしければ、前回執筆した「BigQuery でオブジェクトテーブルが GA になりました」もご覧いただけたらありがたいです。

今回紹介するリリースは、BigQuery の「バッチ SQL トランスレータ (batch SQL translator) 」にログの要約とコードタブの表示がされるようになったことについてです。今回追加された機能はプレビュー段階です。
https://cloud.google.com/bigquery/docs/release-notes#November_07_2023

バッチ SQL トランスレータとは

BigQuery Migration Service という、他のデータベースシステムから BigQuery への移行を支援する機能の一部として、バッチ SQL トランスレータがあります。バッチ SQL トランスレータを使用することで、Amazon Redshift や Teradata などで使用されている SQL クエリを、BigQuery で使用できる形式に自動的に変換できます。
バッチ SQL トランスレータを Google Cloud コンソール上で利用する際の、一連の大まかな流れは以下のとおりです。

  1. 変換したい SQL クエリが書かれたファイル(以下、ソースファイルと呼ぶ)を Cloud Storage にアップロードする
  2. 変換するためのジョブを作成する
    • 今回はコンソール上でジョブを作成しているため、ジョブの作成が完了した段階で、自動的に変換も行われます
  3. 変換された SQL クエリが書かれたファイル(以下、ターゲットファイルと呼ぶ)が Cloud Storage にアップロードされる

バッチ SQL トランスレータの詳細については公式ドキュメントをご参照ください。
https://cloud.google.com/bigquery/docs/batch-sql-translator
ページによっては、バッチ SQL トランスレータを「バッチ SQL 変換」と表記している場合もあります。

今回できるようになったこと

今回できるようになったことは大きく分けて 2 つあります。

  • クエリの変換中に発生したログのサマリーを一覧で確認できるようになった
  • コードタブを利用して、ソースファイルとターゲットファイルを並べて比較できるようになった

以下、実際にできるようになったことを確認し、何が嬉しいのかを見ていきたいと思います。

実際に試してみた

以下の 2 つの Redshift クエリを変換してみて、ログのサマリーやコードタブを確認したいと思います。

redshift_test_sql_1.sql
CREATE TABLE part 
(
  p_partkey     INTEGER NOT NULL,
  p_name        VARCHAR(22) NOT NULL,
  p_mfgr        VARCHAR(6),
  p_category    VARCHAR(7) NOT NULL,
  p_brand1      VARCHAR(9) NOT NULL,
  p_color       VARCHAR(11) NOT NULL,
  p_type        VARCHAR(25) NOT NULL,
  p_size        INTEGER NOT NULL,
  p_container   VARCHAR(10) NOT NULL
);

引用:https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/tutorial-loading-data-create-tables.html

redshift_test_sql_2.sql
SELECT TOP 10 expression
FROM ;
-- エラーをあえて起こすために、FROM 句でテーブルを指定していません

本記事は、ログのサマリーやタブコードがどうなっているかを確認するのを目的に書いているため、バッチ SQL トランスレータとはで記載したような変換ジョブの作成などはすでに済ませてあるものとして、結果のみを確認したいと思います。
まずは redshift_test_sql_1.sql を変換してみます。Redshift のクエリを BigQuery のクエリに変換してくれるジョブ redshift_translation_test_1 で変換した結果、以下のようになりました。

ログのサマリーを見たところ、特にエラーなどは出ていないようですね。
次に、同じ画面の上部にある「コード」を選択します。

「入力ファイルが選択されていません」と表示されました。

左側にあるフォルダから、実際に変換をしたソースファイルを選択します。

すると、ソースファイルとターゲットファイルを並べて比べることができます。

このように並列して表示することで、変換前後のクエリの類似点や相違点についての洞察が得られやすくなりました。嬉しいですね。
ちなみに、変換はベストエフォートで行われるため、変換後のクエリが想定した挙動をするのか確認する必要がありますが、見た感じ、特に問題なさそうです。

次に redshift_test_sql_2.sql を変換してみます。Redshift のクエリを BigQuery のクエリに変換してくれるジョブ redshift_translation_test_2 で変換した結果、以下のようになりました。

想定どおりエラー (SyntaxError) が出ていますね。エラーに対するアクションも記載されているため、解決策を効率的に計画することができそうです。嬉しいですね。
コードタブで redshift_test_sql_2.sql のソースファイルとターゲットファイルを見比べてみましょう。

ソースファイルのクエリに文法ミスがあるため、ターゲットファイルにもエラーと表示され、クエリの変換に失敗しています。

まとめ

今回新たに追加された機能によってできるようになったことと嬉しいポイントをまとめます。

  • ログのサマリーにより、すべての問題を一覧で確認できるようになった。これにより、問題の特定と解決がより迅速になる。
  • コードタブにより、変換前後のファイルを並べて比較することが可能になった。これにより、どのような変換がされるのか理解しやすくなる。

バッチ SQL トランスレータを利用した SQL の変換がより効率的になりそうですね。

関連記事

Discussion