Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
http://gcpug.jp
SQLおじさん(自称)がBigQueryの
Standard SQLを使ってみた
熊野 良(Ryo Kumano)
GCPUG Fukuoka 4th (2016/10/22)
http://gcpug.jp
熊野 良 (Ryo Kumano)
Twitter: @ryok0607
2014/06 〜 株式会社グルーヴノーツ 入社
- 肩書きは 「サーバエンジニア・データベースエンジニア」
- GCP上で稼動している自...
http://gcpug.jp
BigQueryの
Standard SQL
使ってますか??
ところで…
http://gcpug.jp
知ってた。
A. ほとんど使ってない
http://gcpug.jp
- BigQuery Standard SQLとは
- 使い方
- 利用するメリット
- Legacy SQLからの移行
Agenda
http://gcpug.jp
- SQL:2011に準拠している
- 一般的なSQL構文で実行可能になった。
- 入れ子(nested)や繰り返し(repeated)データにも対応
- これまでと同様に非正規形のデータ保持が可能。
- 従来の...
http://gcpug.jp
Web UI: Use Legacy SQLのチェックを外す。
Standard SQLの使い方(Web UI)
http://gcpug.jp
CLI: --nouse_legacy_sql をつける
Standard SQLの使い方(CLI)
http://gcpug.jp
API: useLegacySql を false に設定する
Standard SQLの使い方(API)
http://gcpug.jp
- WITH句が利用できる
- ユーザ定義関数が利用できる
- SELECT句にサブクエリが利用できる
- 相関サブクエリが利用できる
- 配列(ARRAY)や構造体(STRUCT)が利用できる
- 時間データの...
http://gcpug.jp
従来のVIEWをWITH句で定義できる。
利用するメリット: WITH句が利用できる
Legacy SQL Standard SQL
VIEW
Query
http://gcpug.jp
従来のUDF(js)をまとめてQueryで定義できる
利用するメリット: ユーザ定義関数が利用できる
Legacy SQL Standard SQL
UDF
Query
http://gcpug.jp
ちなみに Lgeacy SQLのチェックを外すと
UDF Editor ボタンはdisableになります。
利用するメリット: ユーザ定義関数が利用できる
Legacy SQL Standard SQL
http://gcpug.jp
SELECT句でサブクエリを直接実行可能
利用するメリット: SELECT句にサブクエリが利用できる
Legacy SQL Standard SQL
VIEW
Query
http://gcpug.jp
サブクエリから外のFROM句のtableを参照できる
利用するメリット: 相関サブクエリが利用できる
Standard SQL
http://gcpug.jp
EXISTSも使えるようになった!
(コストさがるのかな?)
利用するメリット: 相関サブクエリが利用できる
Standard SQL
http://gcpug.jp
Result
ARRAY なし STRUCT なし
利用するメリット: 配列(ARRAY)や構造体(STRUCT)が利用できる
Standard SQL
http://gcpug.jp
Result
xに ARRAY あり STRUCT なし
利用するメリット: 配列(ARRAY)や構造体(STRUCT)が利用できる
Standard SQL
http://gcpug.jp
Result
ARRAY なし STRUCT あり
利用するメリット: 配列(ARRAY)や構造体(STRUCT)が利用できる
Standard SQL
http://gcpug.jp
Result
ARRAY あり STRUCT あり
利用するメリット: 配列(ARRAY)や構造体(STRUCT)が利用できる
Standard SQL
http://gcpug.jp
Asia/Tokyoと指定すると日本時間の表示が可能
利用するメリット: 時間データの操作にtimezoneが利用できる
Standard SQL
http://gcpug.jp
TIMESTAMP関数にtime zoneを渡せる
利用するメリット: 時間データの操作にtimezoneが利用できる
Standard SQL Result
TIMESTAMP関数のformatが厳密になったの...
http://gcpug.jp
TIMESTAMP型と異なりtimezone は保持しない。
- DATE (YYYY-[M]M-[D]D)
- TIME ([H]H:[M]M:[S]S[.DDDDDD])
- DATETIME (YYYY-[...
http://gcpug.jp
DML文: INSERT / UPDATE / DELETE
利用するメリット: DML文が利用できる(beta)
http://gcpug.jp
注意点: トランザクションがサポートされてない
オペミスしてもROLLBACKできないよ!
やるときは腹を括って実行しましょう。
注意点: トランザクションがサポートされていない
http://gcpug.jp
注意点: QuotaのCAPが渋い
注意点: QuotaのCAPが渋い
http://gcpug.jp
注意点: INSERT文はcolumnの指定が必須
注意点: INSERT文はcolumnの指定が必須
http://gcpug.jp
注意点: UPDATEとDELETEのQuota値が同じ
一度も実行していないDELETE文もQuota上限となった。
注意点: UPDATEとDELETEのQuota値が同じ
UPDATE文を49回以上実行し、...
http://gcpug.jp
利用するメリット: DML文が利用できる
【公式】MySQLのdumpデータからBQにload可能
https://cloud.google.com/bigquery/docs/loading-data-sql-...
http://gcpug.jp
JSONかCSVでやれ
BQにINSERT文実行すると2sec/recordくらいかかるよね?
http://gcpug.jp
DML文の使いどころ
クソみたいなDML文をどう使うのか?
ログデータは性質上、改竄はできない。
マスタデータの更新であればワンチャンある。
つまり“なかむら式マスタ更新”からの卒業。
参考: http://qi...
http://gcpug.jp
新規QueryをStandard SQLで書く。
⇨ 可能な限りやっていきましょう!
既存のLegacy SQLをStandard SQLで書き直す。
⇨
Legacy SQLからの移行
http://gcpug.jp
ちょっと
待ってほしい!
Legacy SQLからの移行
http://gcpug.jp
- 型名の変更 (INTEGER,RECORD,REPEATED)
- TIMESTAMP型のFORMATを厳密にする
- REQUIREDのcolumnをNULLABLEに変更
- FROM句の[]を``に、:...
http://gcpug.jp
型名の変更
http://gcpug.jp
Standard SQLはTIMESTAMPを
YYYY-[M]M-[D]D [[H]H:[M]M:[S]S[.DDDDDD] [time zone]]
形式で明示的に表記する必要がある。
Legacy SQLで...
http://gcpug.jp
Standard SQLではREQUIREDの属性のcolumnに
データを格納しようとするとエラーとなる。
Invalid schema update.
Field col1 has changed mode ...
http://gcpug.jp
Legacy SQL Standard SQL
FROM句の[]を``に、:を.に置き換える
http://gcpug.jp
Standard SQLはワイルドカード関数を利用できない。
- TABLE_DATE_RANGE
- TABLE_DATE_RANGE_STRICT
- TABLE_QUERY
Legacy SQLからStan...
http://gcpug.jp
Legacy SQL Standard SQL
ワイルドカード関数廃止の対応
http://gcpug.jp
SQLと同様に以下の条件が使用可能
- =
- <>
- (NOT) IN
- BETWEEN A AND B
_TABLE_SUFFIXに使える条件
http://gcpug.jp
Legacy SQL Standard SQL
SELECT句の最後の,禁止
http://gcpug.jp
Legacy SQL Standard SQL
Tableの和集合をUNIONに置き換え
http://gcpug.jp
関数の置き換え
http://gcpug.jp
配列周りの変更が割とある。
SQLを置き換えていくの、正直しんどい。
スライド作るのも正直しんどい
etc...
http://gcpug.jp
Legacy SQLから
Standard SQLに
置き換える必要あんの?
っていうか
http://gcpug.jp
推奨はするが必須ではない、とのこと。
移行に対する公式見解はこちら
じゃあ、移行しなくていいんじゃね?
http://gcpug.jp
移行するもしないも
自己責任で!
(まとまってなくてスイマセン)
じゃあ、移行しなくていいんじゃね?
http://gcpug.jp
- Standard SQL どんどん使っていこう!
- 既存Legacy SQL Queryの移行判断は難しい。
- SQLおじさん達はBQに入門していこう!
まとめ
http://gcpug.jp
ご清聴ありがとうございました。
Upcoming SlideShare
Loading in …5
×

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

13,492 views

Published on

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

Published in: Engineering

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: @ryok0607 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: --nouse_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 ご清聴ありがとうございました。

×