日々地道に成長

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

【Linux,windows,S3】ファイルの行数カウントについて

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

 

今回はデータ準備をする上でよく確認するファイルの行数カウントについてまとめてみました。

特にビッグデータはファイルを開いて確認することが出来ないので、今回紹介する方法は役に立ちます。

それぞれの状況別に確認方法を紹介していきます!

 

Linuxコマンドでの確認方法

Linuxコマンドでの確認にはwcコマンドを使用します。

wcコマンドはテキストファイルの行数や単語数、ファイルサイズ等を確認できるコマンドになっています。

今回は行数を確認するので以下のように入力します。

wc -l test.csv
201023 test.csv

[-l]オプションを使用することで上記のようにファイルの行数のみを表示してくれます。

Windowsでの確認方法

Windows環境ではFINDコマンドを使用します。

FIND /v /c "" test.csv 
test.csv: 201023

S3にあるファイルの確認方法

上記のLinuxコマンドの確認の応用としてS3にあるファイルをダウンロードせずに、確認する方法となります!

aws s3 cp s3://bucket_name/test.csv - | wc -l

上記のようにs3コマンドをwcコマンドに渡すことで確認することができます。

s3にあるファイルを直接確認できて手間が減るので、s3を使用している場合お勧めの方法です!

 

以上でファイルの行数カウント方法は終了となります。

データ準備においてファイルの取り込み件数は重要な確認事項となりますので、今回の方法を活用してみてください。

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

 

【BigQuery,digdag】BQとdigdagを使用した平日判定処理の作成方法

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

 

今回はDigdagのでの平日判定処理の作成方法をまとめてみました。

祝日も除外しての平日のみの処理を作成する必要があったため、この処理を作成してみました。

今まで本ブログで紹介した方法を複合して作成したもになっています!

今までの記事を参考にするとより理解が深まるかと思います。

digdagによる平日判定処理の作成方法

今回使用したdigdagのコードは以下になります。

timezone: 'Asia/Tokyo'
_export:
date: ${moment(session_date).format('YYYY-MM-DD')}

#平日判定処理
+weekday_check:
  +check_query:
  sh_result>: bq query --format=json --use_legacy_sql=false --parameter=date:DATE:${date} < check_weekday.sql
    destination_variable: resultset
    stdout_format: json-list-map

  +weekday_if:
    for_each>:
      rs: ${resultset}
    _do:
      if>: ${rs.flag}
      _do:
      echo>: ${target_date}

処理の流れとしては、以下になります。

  1. 平日判定処理クエリを実行
  2. 平日判定処理クエリ結果をsh_resultプラグインを使用して、変数に代入
  3. for文を使用して変数の値を取り出す
  4. if文にて平日かそうでないかを判別(true or false)
  5. trueの場合処理を実行(今回は実行日を標準出力)

平日判定処理クエリに関しては以下のようになってます。

SELECT
  if(EXTRACT(DAYOFWEEK FROM  DATE (@date)) in (1,7) or
   date(@date) in (select holiday_date from test.holiday),false,true) as flag

test.holidayテーブルには祝日をあらかじめ登録しています。

自分はこちらの内閣府がだしているcsvファイルをもとに作成しました。

www8.cao.go.jp

 

以上で平日判定処理の作成方法は終了となります!

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

【Digdag】sh_resultプラグインの使用、活用方法

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

 

今回はDigdagのsh_resultプラグインの使用方法をまとめてみました。

こちらのプラグインはshコマンドの結果を変数として使用できる、非常に便利なプラグインになっております。

使い方によってはBQのクエリ結果を変数として使用できたりするため、ぜひ覚えておいてください!

sh_resultプラグインの概要

今回使用するsh_resultプラグインのドキュメントはこちらです!

github.com

for_eachオペレータの実際の使用例は以下のようになります。

_export:
plugin:
  repositories:
    - https://jitpack.io
dependencies:
    - com.github.takemikami:digdag-plugin-shresult:0.0.3

+result:
+result_set:
  sh_result>: ls
  destination_variable: resultset
  stdout_format: text

+display:
echo>: ${resultset}

上記はlsコマンドの出力結果をechoコマンドで表示しているものになります。

shresultプラグインを使用するには_exportタスクにてpluginの設定をする必要があります。

pluginの設定はコピペで問題ないです。

オプションの設定は以下のようになってます。

  • destination_variable:格納する変数名の設定
  • stdout_format:出力フォーマトのタイプ設定(text,json-list-map等)

今回は基本的な使い方としてフォーマットはtextでの使用をしています。

 

次回はBQのクエリ結果を使用してのshresultの使用方法を解説しようと思います!

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

【Digdag】digdagにおけるif文の基本使用方法【基礎】

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

 

今回はDigdagのif文の使用方法をまとめてみました。

if文はプログラムにおいて必須の部分ですので、Digdagにおいてもマスターしておくとよいと思います!

Digdagにおけるif文の概要

今回使用するifオペレータの公式ドキュメントはこちらです!

docs.digdag.io


ifオペレータの実際の使用例は以下のようになります。

+task:
if>: ${param}
  _do:
  echo>: "ok"
_else_do:
echo>: "no"

上記はparam変数がtrueなら[ok]、falseなら[no]と出力するものになってます。

それぞれのタスクの役割は以下のようになってます。

  • if>:trueまたはfalseを判定するタスク
  • _do:ifタスクでtrueを受け取ったときに実行されるタスク
  • _do:ifタスクでfalseを受け取ったときに実行されるタスク

注意点としてifタスクではtrueもしくはfalseの判定しかできません

他プログラム等の10以上だったら実行のようなものは、直接入力はできなくなっております。

 

if文の基本的な使用方法は以上になります。

if文の応用的使い方については別で解説しようと考えています!

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

【Digdag】digdagにおけるfor文の基本使用方法【基礎】

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

 

今回はDigdagのfor文の使用方法をまとめてみました。

for文はプログラムにおいて必須の部分ですので、Digdagにおいてもマスターしておくとよいと思います!

Digdagにおけるfor文の概要

今回使用するfor_eachオペレータの公式ドキュメントはこちらです!

docs.digdag.io

for_eachオペレータの実際の使用例は以下のようになります。

+repeat:
  for_each>:
  key: [a, b, c]
  _do:
  echo>: ${key}

上記はkey変数をループさせa,b,cを順番に出力するものになっております。

それぞれのタスクの役割は以下のようになってます。

  • for_each>:for文のループに使用される変数の指定
  • _do:実行するタスクの指定

また、for_eachで指定できる変数はJSON文字列も使用できます。

 

for文の基本的な使用方法は以上になります。

for文の応用的使い方については別で解説しようと考えています!

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

【AWS】AWS認定クラウドプラクティショナー試験の概要

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

 

今回は最近AWS認定クラウドラクティショナーの資格勉強を始めたため、こちらの試験の概要についてまとめてみました!

今回試験を受ける経緯

現在自分はデータプレパレーション周りの知識を習得しています。

主にはSQLやETLツール等を使っているので、そこら辺と関連が深いAWSについても勉強しておきたいなと思い、今回試験を受けてみることにしてみました。

AWSについて

AWSAmazon Web Services)はAmazonが提供しているクラウドサービスのことです。

クラウドサービスは、ネットワークに接続されたコンピュータが様々なサービスをインターネット上で利用することができるものになります。

ストレージ、データベース、アプリケーション等の数多くのサービスを非常に便利に使用できる点からAWSは広く世界中で使用されているものになっています。

aws.amazon.com

AWS認定資格について

AWS認定資格は、AWSクラウドを利用するにあたり必要な知識とスキルの習得および能力の証明のために役に立つものになります。

AWS認定資格には、役割別認定資格と専門知識認定資格がありさらにそこから細かく分類分けが行われております。

自分の知識やスキルにあった資格試験を選択することができるため、試験を受けるときは自身のレベルにあったものを選ぶといいと思います!

今回自分が受けるものは一番の基礎となる役割別認定資格のベーシックにあたる、クラウドラクティショナー試験となってます。

(自分のAWSへの知識はS3を少し触ったことがある程度であるため、クラウドラクティショナー試験としました)

aws.amazon.com

クラウドラクティショナー試験について

AWS認定クラウドラクティショナー試験は、AWSクラウドの全体的な理解を証明するものになります。

AWS認定資格の中では最も難易度的には低いものになっているので、これから勉強しようという人には適している試験になります。

とは言っても推奨の知識としては以下のようになっております。

まとめ

これだけ聞くとものすごく大変そうに感じますが(今自分が感じていますが...)何とかなると信じて現在勉強中です!

これから、AWSの知識についてもブログとしてまとめていきたいとは考えております!

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

【awk】awkでcsvファイルの重複行を削除する方法

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

 

今回はawkを使用して重複行を削除する方法を紹介します。

 

awkについて

awkは入力として受け取った文字列に対して、フィールド区切り文字やレコード区切り文字を指定して、「列」に対する処理を行うためのコマンドです。

コンパイルがいらないこともあり手軽に使用できます。

しかし、一行ずつ処理をおこなうことなど癖も強いため慣れるまでは使いにくいかなという印象を自分は受けました。

 

awkで重複行を削除

 プログラムとしては以下になります。

awk -F "," -v 'OFS=,' '{if(!a[$1]++){print $1}}'

プログラムのそれぞれの意味を解説は以下のようになります。

 

-F ","

区切り文字の指定ができるオプション。今回はcsvファイルなので「,(カンマ)」を指定しています。

 

'OFS=,' 

出力区切り文字の指定ができるオプション。

今回は出力もcsv形式にしたかったので指定しました。

 

$1, $2, ..., $n, ...

第n列目のデータを表す変数です

 

'{if(!a[$1]++){print $1}}'

if文になります。個々の処理で重複行を削除しています。

 

今回は以上となります!

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