ランサーズ(Lancers)エンジニアブログMENUHOMEABOUTRECRUITCOMPANYHOMEABOUTRECRUITCOMPANYランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。13日目の記事となります。SREチームの@adachin0817です。3日目の記事見てくれましたでしょうか!?(以下より)https://engineer.blog.lancers.jp/2019/12/lancers-tech-night/今回はBigQueryのデータをシェルスクリプトでDBにインポートする方法をブログしたいと思います。この裏で動いているのがご好評頂いているランサーズの機能であるユーザーレポートのプロフィール閲覧数のデータを表示しています。ユーザーレポートに関しては以下を参考にしてみてください!https://info.lancers.jp/20847ランサーズのユーザーレポートを確認したところ、今月もプロフィール閲覧数が1,000を超えそうです。ランサーズマイチームを使用して、自分で抱えきれない案件等は、チームで仕事を受けれるようにしていきたいです。(https://engineer.blog.lancers.jp/2018/12/lancers-capybara/)去年のアドベントカレンダーでもご紹介しましたが、上記のプロフィール閲覧数は深夜にdigdag/embulk(embulk-input-bigquery)でアプリケーションログをviewとして作成し、BigQueryのviewテーブルからRDSへシンクしています。去年ベータ版をリリースし、運用してきましたが、いくつかデータが取れないことがあり、取れる日に一気にdigdagで再シンクをしていました。手動で対応するには厳しいので、改善案をいくつか上げてみました。改善案その1embulk-input-bigqueryプラグインのバージョンアップこのプラグインをバージョンアップすれば値が取れたり取れなかったりという事象がなくなるのではないのか、とチームで話し合いあったので取り組んだところ、バッチも動いており、Rubyやembulkのバージョンアップをしなければなく、各プロジェクトが問題なく動作するのかということもあり、断念しました。改善案その2・BigQueryのデータをdigdagサーバーでcsvにエキスポートし、RDSへインポートするhttps://cloud.google.com/bigquery/docs/reference/bq-cli-reference?hl=jabqコマンドには様々なフラグ(オプション)が対応しているので今回「改善案その2」を実装してみました。これであればdigdagでシェルスクリプトを実行できるので、代用案として最適かと思われます。デフォルトは100なので100レコードしか取り出せません。明示的に10万レコードを指定しております。次はdigdagで動かしてみます。/digdag/bigquery_to_mysql/embulk/bigquery-to-mysql.shretry.digを入れることでシェルスクリプトがエラーを起こしても5回再実行されるように設定しています。今の所、毎日漏れなくプロフィール閲覧数が表示されるようになりました!まとめ今回初めてbqコマンドを使ってシェルスクリプトにしてみましたが、実際に書いてみると結構シンプルでした。皆さんもぜひ参考にしてみてください!ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!ご興味がある方は、以下URLよりご応募ください。...ランサーズに出戻って1年。担当した開発プロジェクトを振り返る。」23日目の記事です。...ランサーズで脆弱性スキャナVulsを導入しました!!5月にランサーズのSREチームに入社しました@adachin0817(あだちん)と申します。Lancers,Inc。