Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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
ご清聴ありがとうございました。
Nächste SlideShare
Wird geladen in …5
×

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

14.177 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Ingenieurwesen

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

×