日々地道に成長

思いついたことを書いていきます。

【Python】Pythonエンジニア認定基礎試験合格までの道!

お疲れ様です。コーヒーです。

 

今回は自分がPythonエンジニア基礎試験に合格するために行ったことを紹介していきます!

同じような状況の人はぜひ参考に勉強を進めてみてください!

学習状況

  • 学習期間:1か月
  • 学習時間:毎日30分~1時間
  • pythob経験:大学時代に研究で使用(1~2年授業で使用したくらい)

自分の場合はpythonも基礎的な知識があったこともあり、割と短期間で取得が行えたのかなと思います。

しかし、pythonは大学時代から1年間ほとんど使用していませんでした。

そのため、細かいことはほとんど忘れていました...

pythonの勉強という意味では一から始めた形になっています。

もしプログラミングをいままで触ったことがない人は、もっと勉強時間を多くとる必要があると思います。

特にオブジェクト指向に関してや関数に関しては、初めから勉強すると多くの時間をとるところだと思うので追加の時間を確保してください。

 

勉強方法

  1. 過去問を解く
  2. 間違えた問題を理解するまで調べる

上の手順をひたすらにループして勉強していきました。

どの過去問でも80~90%ほどの正答率になれば、間違いなく合格すると思います!

何なら当日の試験時間はかなり余るくらいには成長できていると思います。

それでは、それぞれの方法を細かく説明します。

 

1.過去問を解く

過去問は以下二つのサイトを利用しました。

exam.diveintocode.jp

こちらのサイトは、受験登録が必要になります。

受けるたびに何種類かの問題からランダムに出題がされているようです。

何回か受けるたびに見たことのある問題が増えてくるとは思います。

 

study.prime-strategy.co.jp

3つの試験が用意されています。

内容としては一つ目より難しく感じましたがこちらの問題を難なく解ければ、試験の問題にも対応できると思います。

 

2.間違えた問題を理解するまで調べる

docs.python.org

とりあえず最初は公式のテキストを見ましょう。

Python検定の問題はここのテキストをもとに出題が行われるので読んでおくとよいです。

ただ、わかりにくい言い回しが多いのでここを見てわからない場合は別のサイトを見るなどを試しましょう。

 

また、プログラムに関しては自分で実際に入力するのが一番理解につながると思います。

自分は「Jupyter Notebook」を使用していました。手軽にプログラム入力できて便利なので、ぜひインストールしてみてください。

 

 

今回は簡潔に自分がPython試験に合格するまでに行ったことをまとめてみました。

プログラミング経験者なら簡単にとることのできる試験だと思うので、ぜひチャレンジしてみてはいいかなと思います!

 

 

 

【BigQuery】ビックデータのcsvファイル出力方法【GCS】

お疲れ様です。コーヒーです。

 

今回はBigQueryにおけるビッグデータの出力方法について解説していきます。

方法は複数あると思いますが、今回はその中でもおすすめの方法であるGCSへの出力方法を紹介しようと思います。

なお、embulkの[embulk-output-bigquery]を使用しての方法を試してみたのですが、ファイルの出力にとても時間がかかってしまったので、ビックデータの出力にはあまり向いていない方法だと思います。

使用するコマンドについて

bqコマンドとgsutilコマンドを使用するため、インストールしていない方はまず[Google Cloud SDK ]のインストールからお願いします。

cloud.google.com

BQからGCSへの出力する流れ

BQからGCSへの出力する流れはおおよそ以下のようになります。

  1. 出力するビックデータのテーブル作成
  2. 先ほど作成したテーブルをGCSへ分割出力
  3. 出力したビックデータを結合

それぞれの項目について詳しく解説していこうと思います。

 

1.出力するビッグデータのテーブル作成

こちらの段階では、出力するビッグデータをクエリで加工しテーブルを作成します。

BigQueryからGCSへ出力する際には、クエリの結果を直接出力することができません。

そのため、この段階であらかじめテーブルを作成しておく必要があります。

もともと出力したいビックデータのテーブルがある場合にはこの段階は飛ばしてもらっても大丈夫です。

2.BQテーブルをGCSへ分割出力

GCSへの出力にはbqコマンドを使用します。

一般的なビックデータでなければ以下方法で出力が可能です。

bq extract [出力対象テーブル名] [GCSのパス]

 サンプルとして入力すると以下のようになります。

bq extract dataset.table gs://sample/test.csv

しかし、上記方法ではビックデータの出力時には以下エラーになってしまいます。

Table gs://・・・・ too large to be exported to a single file. Specify a uri including a * to shard export. See 'Exporting data into one or more files' in https://cloud.google.com/bigquery/docs/exporting-data.

このエラーの解決方法はファイル名に*をつけることです。

bq extract dataset.table gs://sample/test_*.csv

こうすることで、自動で出力可能サイズに分割してくれます。

3.GCS上でビックデータの結合

上記方法で出力を行うともちろん複数ファイルに分かれてしまいます。

そのファイルを一つにまとめる必要があります。

やり方としてはgsutilコマンドの[compose]を使用します。

こちらのコマンドはGCS上のファイルをまとめる際に使用するコマンドです。

gsutil compose gs://sample/test_*.csv gs://sample/test.csv

 だだし、こちらのコマンドで結合できる上限は32ファイルまでです。

そのため32ファイル以上に分割が行われた場合には、複数回上記コマンドを使用して結合を繰り返してください。

 

以上でBQからGCSへのビックデータ出力方法は終了になります!

最後まで読んでいただきありがとうございました!!

 

【Linuxコマンド】mkdirコマンドで既存ディレクトリがある場合にエラーを出さない方法

お疲れ様です。コーヒーです。

 

今回はLinuxコマンドのmkdirコマンドのちょっと便利なオプションについての解説になります。

このオプションを使用すると、ディレクトリが存在していてもエラーをはかないためちょっとしたときに使えると便利です。

mkdirコマンドの概要

mkdirコマンドはディレクトリの作成を行えるコマンドです。

mkdir ディレクトリ名

-pオプションについて

mkdirコマンドにはオプションがあります。

その中の一つとして[-pオプション]があります。

このコマンドはディレクトリが存在していてもエラーメッセージを表示しなくなります。

設定方法は以下のようにします。

mkdir -p ディレクトリ名

それだけでなく、親ディレクトリが存在していなくても、子ディレクトリを作成することもできます。

mkdir -p 親ディレクトリ名/子ディレクトリ名

 

このオプションを使用することで一気にディレクトリを作成できるのでとても便利なオプションになっています。

常時使用してもいいのではないかと思うほど便利なため、ぜひ覚えておいてください。

 

今回は以上になります。

最後まで読んでいただきありがとうございました。

【Digdag BigQuery】DigdagのshコマンドからBigQueryのbqコマンドを使用する

お疲れ様です。コーヒーです。

 

今回はDigdagでのBigQueryの操作についてまとめていこうと思います。

DigdagでBigQueryを操作する方法は主に下記の3つがあります。

  1. DigdagのshコマンドからBigQueryのbqコマンドを使用する
  2. Digdagのbqコマンドを使用する

今回は1つ目のDigdagのshコマンドからBigQueryのbqコマンドを使用する方法について解説していきます。

BigQueryのbqコマンド概要について

BigQueryのbqコマンドのリファレンスについては下記になります。

cloud.google.com

bqコマンドを使用することでCLI上でBigQueryの操作を行うことが出来ます。

例としてはテーブルのコピーやクエリの実行等があります。

今回はクエリの実行をDigdag上で行います。

実行方法について

sh>: bq query --use_legacy_sql=false  < xxx.sql

上記のようにdigdagの[sh>]でbqコマンドを呼び出して実行します。

オプションで[--use_legacy_sql]でfalseを指定しています。

これは標準SQLを使用するために必要な設定となっています。

そのほかにもいろいろな設定を選べるため(replace設定やパーティションの設定等)それぞれ必要な時に調べてみるとよいと思います。

 

今回は以上になります。

次回は2つ目のDigdagのbqコマンドを使用する方法を解説しようと思います。

最後まで読んでいただきありがとうございました。

【Embulk BigQuery】embulk-input-bigqueryとembulk-output-bigqueryでのエラーについて

お疲れ様です。コーヒーです。

 

今回はembulk-input-bigqueryとembulk-output-bigqueryでのエラーについてまとめてみます。

プラグインのURLは以下になります。

github.com

github.com

 

上記プラグイン使用時に不定期で起こるエラーに以下のものがあります。

org.embulk.config.ConfigException: OutputPlugin 'bigquery' is not found.
org.jruby.proxy.org.embulk.config.ConfigException$Proxy1: Unknown output plugin 'bigquery'. embulk/output/bigquery.rb is not installed. Run 'embulk gem search -rd embulk-output' command to find plugins.

こちらのエラーが出現時は基本的には再実行で対処は可能です。

しかし、定期的に実行する場合などはそのままではあまりよくありません。

また、上記のプラグイン使用時にデータ量によってはCPU/メモリ使用率が大幅に上がってしまいます。

エラー対処法

対処法としてはGCSを一度経由する方法があります。

流れとしては以下のようになります。

  1. embulk-input-gcsもしくはembulk-output-gcsを使用しデータを転送
  2. bqコマンド等でGCSからデータの読み込み

使用するプラグインは以下になります。

github.com

github.com

 

上記エラーやCPU使用率を改善したい場合は遠回りになりますが上記方法を試してみてもよいと思います!

今回の内容は以上となります。

最後まで読んでいただきありがとうございました。

【Digdag BigQuery】Digdagのbqコマンドを使用してクエリを実行する方法

お疲れ様です。コーヒーです。

 

今回はDigdagでのBigQueryの操作についてまとめていこうと思います。

DigdagでBigQueryを操作する方法は主に下記の3つがあります。

  1. DigdagのshコマンドからBigQueryのbqコマンドを使用する
  2. Digdagのbqコマンドを使用する

今回は2つ目のbqコマンドを使用する方法について解説していきます。

Digdagのbqコマンド概要について

Digdagのbqコマンドのリファレンスは以下になります。

docs.digdag.io

まず、こちらの方法について前提としてBigQueryの[location]が[asia-northeast1]の方は使用できません

理由として、現在(2021/03/31)はlocationの指定がオプションでできないためです。

そのため、[location]が[asia-northeast1](正確にはlocationの指定が必要な場合)は別の方法の使用を検討してください。

他の方法は以下のリンクで紹介しているため、よければ確認してみてください。

 

stady-diary.hatenablog.com

 

bqコマンドの実行方法

コードの使用方法としては以下のように使用します。

bq>: queries/step1.sql

[bq >]の形でsqlを指定して使用できます。

また以下のようにdigdag配下にディレクトリを設定して使用してください。
└── digdag
 ├── xxx.dig
 └── queries
  |── xxx.sql

digdag secretsの設定

Google BigqueryのJSON形式の秘密鍵をdigdag secretsの[gcp.credential]に設定しなければbqコマンドを使用できません。

Digdag シークレットのlocalに設定する場合は以下のように設定行ってください。

cat [service account.json] |digdag secrets --local --set gcp.credential=@[service account.json]

 

 

今回は以上になります。

最後まで読んでいただきありがとうございました。

【BigQuery】An internal error occurred and the request could not be completed」エラーについて&digdagのretry機能

お疲れ様です。コーヒーです。

 

今回はBigQueryの「An internal error occurred and the request could not be completed」エラーについてと、その対処法についてです。

エラーの状況について

  • digdag+embulkでbqのクエリを実行時発生
  • 発生タイミングは不定
  • 再実行時にはエラーが出ない

上記のような状況でエラーが起こっていました。

 

こちらのエラーについて調査したところ以下のような状況でした。

  • BQの内部エラーで起こる
  • 原因は現状不明
  • 再実行で解決可能

ただ毎回再実行しなくてはいけないのでは、定期的に動かすクエリとしては問題があります。

digdagの_retryオプション

今回はこの問題をdigdagのretryオプションで解決しました。

公式の文は以下になります。

docs.digdag.io

使用方法は簡単で、エラーが起きてしまった時にやり直ししてほしいタスクに[_retry]を設定するだけです。

+bq:
  _retry: 3

  +step1:
    sh>: bq query --use_legacy_sql=false < xxx.sq

上記はエラー時に3回までリトライするものになります。

 

ただこれだけだと、連続でクエリをやりなすのでエラーが連続で起きてしまう可能性があるため、以下のようにクエリをリトライするまでのインターバルを設定することで動作を安定させられます。

+bq:
  _retry:
    limit: 3
    interval: 60
    interval_type: exponential

  +step1:
    sh>: bq query --use_legacy_sql=false < xxx.sql

こちらはstep1タスクがエラー時に60秒間をあけて再実行するものになります。

[interval_type]をexponentialに設定すると、再実行までの間隔を失敗するごとに増やしてくれるものになります。

 

以上でbqのエラーをdigdagのオプションで解決する手段でした。

最後まで読んでいただきありがとうございました。