読者です 読者をやめる 読者になる 読者になる

唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

BigQueryでINSERTやUPDATEが使えるようになるらしい

2016年9月末のリリーズでBigQueryにいろいろ機能が追加されました
個人的に便利そうだな、と思ったものを紹介します

cloud.google.com

標準SQL (Standard SQL)

BigQueryでは独自のSQLを使っていたのですが、標準のSQLに対応しました(6月にベータリリースされていたのがベータでなくなりました)
ずっと古い方のSQLを使っていたので、移行して慣れるのが大変ですが、移行用のドキュメントがあります

WITH句

標準SQLではサブクエリに名前を付けて参照できるようになるので、何段もネストしてわけがわからなくなるのから開放されます

WITH サブクエリの名前 AS (
  サブクエリ
)

SELECT
  *
FROM サブクエリの名前
WHERE MOD(`id`, 2) = 0

UDF(User-Defined Functions)

前からJavaScriptでユーザー定義関数を書くことができて、記法がわかりづらかったのですが、標準SQLではだいぶ書きやすくなりました

CREATE TEMPORARY FUNCTION timesTwo(x FLOAT64)
RETURNS FLOAT64
  LANGUAGE js AS """
  return x*2;
""";
User-Defined Functions  |  BigQuery Documentation  |  Google Cloud Platform

これでJavaScriptの強力な機能をBigQuery内から使うことができるようになります
たとえば、Legacy SQLの方にはJSONから値を取り出すJSON_EXTRACT_SCALAR()という関数があったのですが、今の標準SQLにはなくなっていて代わりにUDFを使うことができます

INSERT, UPDATE, DELETE

今までBigQueryでは基本的にデータの追加だけで、UPDATEやDELETEなどのテーブル内の更新操作は許されていなかったのですが、こういった操作ができるようになります(標準SQLのみ。ベータリリース)

UPDATE table1 SET col1 = 1 WHERE col1 in (SELECT field1 from table2)
Data Manipulation Language  |  BigQuery Documentation  |  Google Cloud Platform

ただしUPDATE/DELETEできるのは1日に付き、テーブルごとに48回、プロジェクトごとに500回とかなり制限されているので、頻繁に更新するような用途では使えそうにありません

クエリの共有

クエリをURLで共有できるようになりました
公開範囲はパブリックかプロジェクト内かを選べます
「Save Query」クエリで保存すればシェア用のURLを発行できるようになります

-->