SQLおじさん(自称)がBigQueryのStandard SQLを使ってみた

260 views

Published on

2016/10/22 GCPUG Fukuoka 4thで発表。
BigQueryのStandard SQLの機能やLegacySQLからの移行に関する注意点など。

Published in: Engineering
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
260
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

SQLおじさん(自称)がBigQueryのStandard SQLを使ってみた

  1. 1. http://gcpug.jp SQLおじさん(自称)がBigQueryの Standard SQLを使ってみた 熊野 良(Ryo Kumano) GCPUG Fukuoka 4th (2016/10/22)
  2. 2. http://gcpug.jp 熊野 良 (Ryo Kumano) Twitter: @kumanoryo 2014/06 〜 株式会社グルーヴノーツ 入社 - 肩書きは 「サーバエンジニア・データベースエンジニア」 - GCP上で稼動している自社サービスのインフラ設計・構築・運用を担当 - 2015/08 〜 東京 -> 福岡に移住 過去(5年以内)に携わった業務 - 国内大手B2Cサイトのインフラ設計・構築・運用・DB設計・チューニング など 自己紹介
  3. 3. http://gcpug.jp BigQueryの Standard SQL 使ってますか?? ところで…
  4. 4. http://gcpug.jp 知ってた。 A. ほとんど使ってない
  5. 5. http://gcpug.jp - BigQuery Standard SQLとは - 使い方 - 利用するメリット - Legacy SQLからの移行 Agenda
  6. 6. http://gcpug.jp - SQL:2011に準拠している - 一般的なSQL構文で実行可能になった。 - 入れ子(nested)や繰り返し(repeated)データにも対応 - これまでと同様に非正規形のデータ保持が可能。 - 従来のBigQueryのSQL構文はLegacy SQLという呼び方に - Legacy扱いとか嫌な予感しかしない。 - が、まだあわてるような時間じゃない(はず)。 BigQuery Standard SQLとは
  7. 7. http://gcpug.jp Web UI: Use Legacy SQLのチェックを外す。 Standard SQLの使い方(Web UI)
  8. 8. http://gcpug.jp CLI: --use_legacy_sql をつける Standard SQLの使い方(CLI)
  9. 9. http://gcpug.jp API: useLegacySql を false に設定する Standard SQLの使い方(API)
  10. 10. http://gcpug.jp - WITH句が利用できる - ユーザ定義関数が利用できる - SELECT句にサブクエリが利用できる - 相関サブクエリが利用できる - 配列(ARRAY)や構造体(STRUCT)が利用できる - 時間データの操作にtime zoneが利用できる - time zoneを持たない時間データ型が利用できる - DML文が利用できる (2016年10月現在beta) 利用するメリット
  11. 11. http://gcpug.jp 従来のVIEWをWITH句で定義できる。 利用するメリット: WITH句が利用できる Legacy SQL Standard SQL VIEW Query
  12. 12. http://gcpug.jp 従来のUDF(js)をまとめてQueryで定義できる 利用するメリット: ユーザ定義関数が利用できる Legacy SQL Standard SQL UDF Query
  13. 13. http://gcpug.jp ちなみに Lgeacy SQLのチェックを外すと UDF Editor ボタンはdisableになります。 利用するメリット: ユーザ定義関数が利用できる Legacy SQL Standard SQL
  14. 14. http://gcpug.jp SELECT句でサブクエリを直接実行可能 利用するメリット: SELECT句にサブクエリが利用できる Legacy SQL Standard SQL VIEW Query
  15. 15. http://gcpug.jp サブクエリから外のFROM句のtableを参照できる 利用するメリット: 相関サブクエリが利用できる Standard SQL
  16. 16. http://gcpug.jp EXISTSも使えるようになった! (コストさがるのかな?) 利用するメリット: 相関サブクエリが利用できる Standard SQL
  17. 17. http://gcpug.jp Result ARRAY なし STRUCT なし 利用するメリット: 配列(ARRAY)や構造体(STRUCT)が利用できる Standard SQL
  18. 18. http://gcpug.jp Result xに ARRAY あり STRUCT なし 利用するメリット: 配列(ARRAY)や構造体(STRUCT)が利用できる Standard SQL
  19. 19. http://gcpug.jp Result ARRAY なし STRUCT あり 利用するメリット: 配列(ARRAY)や構造体(STRUCT)が利用できる Standard SQL
  20. 20. http://gcpug.jp Result ARRAY あり STRUCT あり 利用するメリット: 配列(ARRAY)や構造体(STRUCT)が利用できる Standard SQL
  21. 21. http://gcpug.jp Asia/Tokyoと指定することで日本時間で表示可能 利用するメリット: 時間データの操作にtimezoneが利用できる Standard SQL
  22. 22. http://gcpug.jp TIMESTAMP関数にtime zoneを渡せる 利用するメリット: 時間データの操作にtimezoneが利用できる Standard SQL Result TIMESTAMP関数のformatが厳密になったので注意!(後述)
  23. 23. http://gcpug.jp TIMESTAMP型と異なりtimezone は保持しない。 - DATE (YYYY-[M]M-[D]D) - TIME ([H]H:[M]M:[S]S[.DDDDDD]) - DATETIME (YYYY-[M]M-[D]D [H]H:[M]M:[S]S[.DDDDDD]) TIMESTAMPとDATETIMEを混ぜると事故るのでどちら かに寄せる設計を心がけましょう。 利用するメリット: timezoneを持たない時間データ型が利用できる
  24. 24. http://gcpug.jp DML文: INSERT / UPDATE / DELETE 利用するメリット: DML文が利用できる(beta)
  25. 25. http://gcpug.jp 注意点: トランザクションがサポートされていない オペミスしてもROLLBACKできないよ! やるときは腹を括って実行しましょう。 注意点: トランザクションがサポートされていない
  26. 26. http://gcpug.jp 注意点: QuotaのCAPが渋い 注意点: QuotaのCAPが渋い
  27. 27. http://gcpug.jp 注意点: INSERT文はcolumnの指定が必須 注意点: INSERT文はcolumnの指定が必須
  28. 28. http://gcpug.jp 注意点: UPDATEとDELETEのQuota値が同じ 一度も実行していないDELETE文もQuota上限となった。 注意点: UPDATEとDELETEのQuota値が同じ UPDATE文を49回以上実行し、Quota上限となったことを確認。
  29. 29. http://gcpug.jp 利用するメリット: DML文が利用できる 【公式】MySQLのdumpデータからBQにload可能 https://cloud.google.com/bigquery/docs/loading-data-sql-dml#loading_data_using_sql_dml これInsert文を1行ずつbqで実行してるだけやん...
  30. 30. http://gcpug.jp JSONかCSVでやれ BQにINSERT文実行すると2sec/recordくらいかかるよね?
  31. 31. http://gcpug.jp DML文の使いどころ クソみたいなDML文をどう使うのか? ログデータは性質上、改竄はできない。 マスタデータの更新であればワンチャンある。 つまり“なかむら式マスタ更新”からの卒業。 参考: http://qiita.com/satoru_mag/items/fb233c188dd63f1aafff
  32. 32. http://gcpug.jp 新規QueryをStandard SQLで書く。 ⇨ 可能な限りやっていきましょう! 既存のLegacy SQLをStandard SQLで書き直す。 ⇨ Legacy SQLからの移行
  33. 33. http://gcpug.jp ちょっと待ってほしい! Legacy SQLからの移行
  34. 34. http://gcpug.jp - 型名の変更 (INTEGER,RECORD,REPEATED) - TIMESTAMP型のFORMATを厳密にする - REQUIREDのcolumnをNULLABLEに変更 - FROM句の[]を``に、:を.に置き換える - ワイルドカード関数廃止の対応 - SELECT句の最後の,禁止 - Tableの和結合をUNIONに置き換える - 関数の置き換え etc... Legacy SQLからの移行TODO
  35. 35. http://gcpug.jp 型名の変更
  36. 36. http://gcpug.jp Standard SQLはTIMESTAMPを YYYY-[M]M-[D]D [[H]H:[M]M:[S]S[.DDDDDD] [time zone]] 形式で明示的に表記する必要がある。 Legacy SQLでOKであった以下はエラーとなる。 YYYY/[M]M/[D]D [H]H:[M]M:[S]S YYYY-[M]M-[D]D [H]H:[M]M TIMESTAMP型のformat
  37. 37. http://gcpug.jp Standard SQLではREQUIREDの属性のcolumnに データを格納しようとするとエラーとなる。 Invalid schema update. Field col1 has changed mode from REQUIRED to NULLABLE Standard SQL使う場合は NULLABLEに変換しましょう。 REQUIREDのcolumnをNULLABLEに変更
  38. 38. http://gcpug.jp Legacy SQL Standard SQL FROM句の[]を``に、:を.に置き換える
  39. 39. http://gcpug.jp Standard SQLはワイルドカード関数を利用できない。 - TABLE_DATE_RANGE - TABLE_DATE_RANGE_STRICT - TABLE_QUERY Legacy SQLからStandard SQLへの移行方法 1. FROM句から関数呼び出しを削除する 2. WHERE句で _TABLE_SUFFIX を指定する ワイルドカード関数廃止の対応
  40. 40. http://gcpug.jp Legacy SQL Standard SQL ワイルドカード関数廃止の対応
  41. 41. http://gcpug.jp SQLと同様に以下の条件が使用可能 - = - <> - (NOT) IN - BETWEEN A AND B _TABLE_SUFFIXに使える条件
  42. 42. http://gcpug.jp Legacy SQL Standard SQL SELECT句の最後の,禁止
  43. 43. http://gcpug.jp Legacy SQL Standard SQL Tableの和集合をUNIONに置き換え
  44. 44. http://gcpug.jp 関数の置き換え
  45. 45. http://gcpug.jp 配列周りの変更が割とある。 SQLを置き換えていくの、正直しんどい。 スライド作るのも正直しんどい etc...
  46. 46. http://gcpug.jp Legacy SQLから Standard SQLに 置き換える必要あんの? っていうか
  47. 47. http://gcpug.jp 推奨はするが必須ではない、とのこと。 移行に対する公式見解はこちら じゃあ、移行しなくていいんじゃね?
  48. 48. http://gcpug.jp 移行するもしないも 自己責任で! (まとまってなくてスイマセン) じゃあ、移行しなくていいんじゃね?
  49. 49. http://gcpug.jp - Standard SQL どんどん使っていこう! - 既存Legacy SQL Queryの移行判断は難しい。 - SQLおじさん達はBQに入門していこう! まとめ
  50. 50. http://gcpug.jp ご清聴ありがとうございました。

×