1. turupon

    Posted

    turupon
Changes in title
+オブジェクトストレージCloudian/S3にあるJSON形式のデータから特定のデータを抽出してみます
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,116 @@
+## はじめに
+クレデンシャル情報の定義を変更するだけで、プログラムを変更せずに Cloudian と S3 へのアクセスが可能となります。 オブジェクトストレージを オンプレミス と S3 でハイブリッドに使いたい方へ参考になればと、、、
+
+## 概要
+オブジェクトストレージ/Cloudian上のバケット名「boto3-cloudian」にあるJSON形式のデータファイルから特定のデータを抽出する Python プログラムです。
+
+JSON形式のデータファイルは、 ここ で生成した「test-iot-dummy.json」となり、1万件のデータが存在しています。そのデータから、項目「section」=「R」のものを抽出し、そのデータ件数と抽出に掛かった時間を表示します。
+
+抽出項目「section」はパラメータとして定義することも可能です(アルファベット大文字1文字)。プログラム実行時に、パラメータ「-h」を指定することにより表示されるヘルプも参照ください。
+
+## 実行環境
+macOS Big Sur 11.1
+python 3.8.3
+
+## クレデンシャル情報の定義
+今回はクレデンシャル情報を .zshenv に定義してプログラムを実行しています。
+
+```
+# AWS S3
+export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxx
+export AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyy
+export AWS_DEFAULT_REGION=ap-northeast-1
+
+# Cloudian
+#export AWS_ACCESS_KEY_ID=aaaaaaaaaaaaaaaaaa
+#export AWS_SECRET_ACCESS_KEY=bbbbbbbbbbbbbbbbbbbb
+#export AWS_DEFAULT_REGION=pic
+```
+
+## 実行プログラム
+```python:IoTSample-read.py
+
+import json
+import time
+import argparse
+import boto3
+
+BUCKET_NAME = 'boto3-cloudian'
+OBJECT_KEY = 'test-iot-dummy.json'
+
+
+# S3-APIで全データ取得してロジックでフィルタ(項目:Section)
+def section_main(section):
+ client = boto3.client('s3')
+ response = client.get_object(
+ Bucket=BUCKET_NAME,
+ Key=OBJECT_KEY
+ )
+
+ target = []
+ if 'Body' in response:
+ body = response['Body'].read()
+ text = body.decode('utf-8')
+ items = json.loads(text)
+ items = items['items']
+ target = list(filter(lambda x: x['section'] == section, items))
+ # print(target)
+ return len(target)
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description='IoT機器のなんちゃってダミーデータの抽出')
+ parser.add_argument('--section', type=str, default='R', help='抽出するセクションの指定(アルファベット大文字1文字)')
+ args = parser.parse_args()
+
+ start = time.time()
+
+ num = section_main(args.section)
+
+ select_time = time.time() - start
+
+ print("")
+ print(f"データ抽出件数:{num}")
+ print("抽出処理時間(通常_API):{0}".format(select_time) + " [sec]")
+ print("")
+
+```
+
+
+## プログラムの実行
+
+最初にヘルプを表示してみます。
+
+```
+$ python IoTSample-read.py -h
+usage: IoTSample-read.py [-h] [--section SECTION]
+
+IoT機器のなんちゃってダミーデータの抽出
+
+optional arguments:
+ -h, --help show this help message and exit
+ --section SECTION 抽出するセクションの指定(アルファベット大文字一文字)
+```
+
+
+では、デフォルトの抽出項目でデータ抽出を実行してみます。
+
+```
+$ python IoTSample-read.py
+
+データ抽出件数:17
+抽出処理時間(通常_API):0.20635700225830078 [sec]
+```
+
+
+次に、抽出項目を指定した場合の実行です。
+
+```
+$ python IoTSample-read.py --section S
+
+データ抽出件数:29
+抽出処理時間(通常_API):0.22118234634399414 [sec]
+```
+
+## 参考文献
+