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.

BigQueryを使ってみた(2018年2月)

Google BigQuery
この資料は社内関係者の許可を得て、BigQuery を初めて使って分かったことを人に随時説明するために、補助資料として作ったものを公開するものです。

  • Loggen Sie sich ein, um Kommentare anzuzeigen.

  • Gehören Sie zu den Ersten, denen das gefällt!

BigQueryを使ってみた(2018年2月)

  1. 1. Google BigQuery を 使ってみた 2018-02-14 下野寿之 この資料は社内関係者の許可を得て、BigQuery を 初めて使って分かったことを人に随時説明するために、 補助資料として作ったものを公開するものです。
  2. 2. BigQuery とは ØGoogle クラウドのサービスの1つ。 ØSQL⽂でデータの参照が出来る。 ØSQL⽂のUpdate と Deleteはできない。 Øインデックスも無いようだ。 Øとにかく速い。 Ø裏で数千台数万台のサーバーに計算を⾛らせている。 Ø今まで、2分以上かかったことが無い。 Ø簡単な計算は10〜15秒。簡単なのに60秒かかることもある。 Ø料⾦は 1TB(テラバイト)の参照に5ドル。 Øデータを1週間保管すると、同じ料⾦がかかる。 ØCPUに負荷がかかるような計算をしても、⼀定。 Ø参照する列(カラム)を減らすと、節約可能。 ØWhere 句で参照する⾏が、コスト上は減らない。
  3. 3. BigQueryを使う為には • データのインポート: • GoogleクラウドのGCS(Google Cloud Storage)に データファイルを載せて、インポートを要する。 • ブラウザで使う • Googleアカウントを1つだけログインして使う。 • 他のGoogleアカウントは使えない。 • ブラウザはChrome も Canaryも同時に起動すると、 メールやGoogleドライブの参照に便利。
  4. 4. BigQuery のSQL • Legacy と標準(Standard) SQL の選択が必要。 • ブラウザでオプション設定して使う。 • Legacyはjoinやcount(distinct ..)に各種配慮が必要。 • ジョイン(複数のテーブルの結合) • 最近は、{left, right, full} outer join が全て実⾏可能。 • 共有メモリの制約が気になったものの、問題無し。 • Over()句を使った分析関数が使える。 • Row_numer, rank, ntile, approx_{top_count ,quantile} • 配列も使える。 • 正規表現(regular expression)による演算も可能。
  5. 5. BigQueryの結果の出⼒ • 20〜30⾏以内: • ブラウザからエクセルへコピペする。 • 少しコツが必要。コピー領域は出⼒表の 最後のセルをぴったり選択する必要があるようだ。 • 約1万⾏以内: • CSV 形式ですぐ出⼒出来る。 • “配列” を含むセルが存在すると、出⼒不能になる。 • それ以上 : • Google Cloud Storage を経由する。 • ローカルにGoogle Cloud SDK が必要のようだ。
  6. 6. select age, q6[offset(1)], q6[offset(2)], q6[offset(3)], q6[offset(4)], q6[offset(5)] from (select age, approx_quantile(pay,6) q6 from T01 inner join PAY2016 using ( card_id ) group by age ) 1/6 2/6 3/6 4/6 5/6
  7. 7. 参照した4個の表 : 6 - 請求情報 7-確定情報 8-月次請求額 22-支払判定 6と7と22に各⽀払の⽇付情報あり。6と7と8に、毎⽉の締年⽉の⽇付列あり。
  8. 8. Select PAY16.annual_pay , T07.price from T07 inner join PAY16 using ( card_id ) where rand () < T07.price / 57.124e8 # 各⽀払の額の57億1240万円に対する⽐で、ランダムに確率抽出。 図は R⾔語でプロット 2016年に2000万円以上請求されたカードによる、全体金額への貢献は約1%。

×