BigQuery からユーザー フレンドリーな SQL に愛をこめて
Google Cloud Japan Team
※この投稿は米国時間 2022 年 2 月 15 日に、Google Cloud blog に投稿されたものの抄訳です。
最初の SQL 標準である SQL-86 が世に出たのは 35 年前でした。1986 年には ANSI 標準として公開され、1987 年には国際標準化機構(ISO)として採用されました。このバレンタイン デーに、ユーザー フレンドリーな SQL に対する BigQuery の愛と献身を SQL の多数の新機能を通して再認識し、敬愛する BigQuery ユーザーの皆さまにご紹介します。
拡張されたデータ型
INTERVAL データ型
歳月人を待たずということわざがありますが、今では INTERVAL データ型のおかげで、BigQuery 内で一定の期間の計測が可能となりました。このデータ型により、数年から小数点以下の時間の範囲で開始のタイムスタンプと終了のタイムスタンプ間の差分をネイティブ データ型で保存できるようになります。
列のデータ型を変更する
以前の BigQuery におけるユーザー フレンドリーな SQL のアップデートで、Google は BigQuery でのパラメータ化されたデータ型のサポートを発表しました。そのうえ、BigQuery では現在、制限を緩めるために、既存の列のデータ型を変更する機能もサポートしています。また、SET DATA TYPE 句を使用することで、NUMERIC データ型を BIGNUMERIC 型に変更するか、パラメータ化されたデータ型の列の長さまたは精度やスケールの値を変更して増やすことができます。データ型の有効な強制変換については、標準 SQL の変換ルールページで変換前の列と強制型変換後の列をご覧ください。
新たな JSON データ型についての詳細は、BigQuery による半構造化データのネイティブ サポートのプレビュー版を発表をご覧ください。
拡張された SQL 式とスクリプティングの制御ステートメント
WITH RECURSIVE の共通テーブル式
クエリで WITH 句を使用して参照された共通テーブル式(CTE)は、CTE サブクエリの結果を含む一時テーブルを使用することで、ユーザーによる複雑なクエリの分割を可能にします。これは、テーブルとして同じクエリ内の他の部分で参照される場合があります。UNION ALL オペレーションを含む WITH RECURSIVE 句を使用して参照された再帰 CTE には、以下の要素が含まれます。
base_term: 再帰演算の初回の反復処理を実行します。
recursive_term: 再帰が停止するまで残りのイテレーションを実行します。
union_operator: UNION 演算子が、基本的表現や再帰的表現の UNION から行を返します。
再帰 CTE は、テーブルで階層データのクエリを実行する際に非常に役に立つ場合があります。たとえば、大規模なマルチレベルの組織の従業員と管理者、またはサブコンポーネントや関連部品が付随した複雑なプロダクトの資料一式などの場合です。
スクリプティングの制御ステートメント
データ分析のためのビジネス ロジックがますます複雑化する中、スクリプティングの制御ステートメントは、データ アナリストによる条件付きロジックの適用を可能にし、スクリプト実行中に遭遇した特定の条件に基づく異なるワークフローの実行を実現します。BigQuery は、以下の追加のスクリプティングの制御ステートメントをサポートします。
FOR…IN: テーブル式のすべての行にわたってループします。これは、他のループでは処理されないクエリ結果の反復処理の簡潔な方法です。
REPEAT: リストの末尾のブール条件が TRUE になるまで、SQL ステートメントのリストを繰り返し実行します。
CASE: 以前に IF…ELSE IF ステートメントをサポートしていた条件付きロジックを実行するために、より効率的な SQL 式を提示します。ブール条件が TRUE となる SQL ステートメントの最初のリストを実行します。
CASE <search expression>: 検索式を使った CASE ステートメントでは、検索式が WHEN 式と一致する SQL ステートメントの最初のリストを実行します。
Labels: ラベルに関連付けられたブロックまたはループの末尾へ無条件でジャンプします。ラベルがある BREAK または CONTINUE では、連続実行を継続するのではなく、スクリプト内の特定の(名前付きの)ロケーションへスキップすることによって、ユーザーはネストされたループまたはステートメント本文をより詳細に制御可能になります。
テーブルコピー DDL
CREATE TABLE LIKE と CREATE TABLE COPY
アナリストやデータ エンジニアは、本番環境からテスト環境や開発環境への、テーブル スキーマのコピー(データなし)または完全なテーブルコピー(データあり)を作成する必要がある場合が多くあります。CREATE TABLE LIKE ステートメントは、ソーステーブルのメタデータのみをコピーします。一方で、CREATE TABLE COPY ステートメントは、ソーステーブルから新しいテーブルへとメタデータとデータをコピーします。両方の CREATE TABLE オペレーションによって作成された新しいテーブルは、作成後はソーステーブルとは関係ありません。そのため、ソーステーブルの変更は新しいテーブルには反映されません。
テーブル スナップショットに関する DDL のサポートについての詳細は、BigQuery のテーブル スナップショットで、スピーディで簡単かつ経済的なデータのバックアップが可能にをご覧ください。
拡張された INFORMATION_SCHEMA ビュー
データ ストリーミング用の INFORMATION SCHEMA
BigQuery にデータをストリーミングする場合、これからは INFORMATION_SCHEMA ストリーミング ビューを使用してデータ ストリームをモニターすることができ、データ ストリームに関する履歴やリアルタイムの情報を BigQuery で取得することが可能です。これらのビューには、データがストリーミングされた各テーブルの 1 分ごとに集計された統計情報が含まれます。
拡張された INFORMATION_SCHEMA ビューにおける DDL 列のサポート
昨年、Google は INFORMATION SCHEMA ビューにおける DDL 列のサポートについて発表しました。これは革新的なアプローチで、データ管理者による単一、複数、すべてのテーブルに対するオブジェクト作成 DDL の生成が可能となり、さらに TABLES INFORMATION_SCHEMA ビューからの直接的なビューが実現します。現在、BigQuery は schemata(データセット)や routines(関数、テーブル関数、プロシージャ)といった、その他のオブジェクト タイプ向けのオブジェクト作成 DDL の生成機能をサポートしています。
こうした BigQuery での新しいユーザー フレンドリーな SQL の機能を気に入っていただけたら幸いです。詳細については、BigQuery ページをご覧いただくか、BigQuery サンドボックスを使用して BigQuery を無料でお試しください。