1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

データの受け渡しにS3を使う。2019-09-09

Posted at

概要

世はまさに大データ時代です。
社内で分析している場合もありますが、外注して分析をしてもらっている場合もあります。
外注している場合はデータの受け渡しが発生します。
メール添付で送ったり、何か媒体に記録して送ったり、便利なクラウドサービスを利用したり、いろいろ手段はあります。

今回は「データを受け取って分析をする側」にたって、データの受け渡しにS3を使うといろいろ便利かもしれない点について書きます。

前提・準備

状況整理

  • 発注者、データを分析して欲しい人、データを準備する人、データを送る人
  • 受注者、データを分析する人、データを授受する場を用意する人、データを受け取る人、すでにAWS利用中

ポイント: 「受注者」が "データを授受する場を用意する" ケースです
(「発注者」が「受注者」が用意したS3にデータを置きます)

S3の準備

良い感じに特定のBucketだけ見られるようなポリシーを作ります。
「発注者」からは受け渡しに使うBucketのみ見える状態です。

設定内容の詳細は割愛(画面からぽちぽちでも簡単に設定できるし、awsコマンドを使っても簡単にできるし、ググればやり方はたくさん見つかると思う!)

授受するデータ

例えば、 あるユーザの利用金額のデータの授受をすこぶるシンプルに考えます。
ファイルの形式は CSVgzipで圧縮 されています。
ユーザID,利用金額
という内容です。具体的には以下の内容で、

% gzcat test_data.csv.gz | head
g,55777
n,14623
l,65655
t,92348
a,87128
m,74247
j,55425
j,44207
z,67019
j,5178

サイズもそこそこあります。

% file test_data.csv.gz
test_data.csv.gz: gzip compressed data, was "test_data.csv", last modified: Mon Sep  9 07:56:49 2019, from Unix, original size 788893425
% gzcat test_data.csv.gz | wc -l
 100000000

便利かもしれないポイント

すでにAWSを使っている場合、IAMをよしなにつかするだけでよい

すでにAWSを使っている場合、IAMをよしなにつかするだけでよいので楽 :smiley:

データの事前処理にAthenaを支えて便利、になるかも

例)不要なデータを抜く

例えば「1円のデータはテストデータだから分析対象には含めないでください」という指示が「発注者」からきた場合を考えます。
(結果の見やすさを考えて1円のデータが何件あるか数えます)

そこで登場 Athena 先生

便利ポイント

  • Athena先生がよしなにS3上にあるファイルを読んでくれる
  • Athena先生がよしなにCSVをパースしてくれる
  • Athena先生がよしなにgzip圧縮されているファイルを解凍してくれる
  • Athena先生のSQLパワーでよしなに集計などが行える

上記の通りの便利ポイントがあります。
「発注者」にS3にファイルを置いてもらったら、「受注者」側では

  1. Athenaでcreate tableする
  2. Athenaでselectする

の2ステップで良い感じにデータの前処理ができます。

1. Athenaでcreate tableする
CREATE EXTERNAL TABLE `test_tb`(
  `id` string, 
  `amount` int)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
LOCATION
  's3://バケット名/'
2. Athenaでselectする

1円データを抜く

SELECT count(amount)
FROM test_tb
WHERE amount = 1 

(Run time: 30.85 seconds, Data scanned: 353.52 MB)

_col0
1 954

集計例
idごとに集計してみたりも容易

SELECT
  id,
  count(amount)
FROM test_tb
WHERE amount = 1
GROUP BY  id

(Run time: 30.81 seconds, Data scanned: 353.52 MB)

id _col0
1 w 27
2 u 34
3 b 29
4 l 23
5 m 41
. .

その他のやり方も考える

コマンドで抜く
% time (gzcat test_data.csv.gz | egrep ',1$' | wc -l)
     954
( gzcat test_data.csv.gz | egrep ',1$' | wc -l; )  32.62s user 0.43s system 111% cpu 29.753 total

1円のデータを抜くだけの一例。
不要なデータを抜くだけならコマンドでも十分かもしれないが、もう少しカラムの多いCSVや、もう少し難しい条件の場合は大変そう。

RDBを使う

割愛。たぶん S3 + Athena よりはいろいろ準備が必要なはず。
RDBを使う場合もAthenaである程度加工したデータをinsertした方が良いのではなかろうか。

まとめ

データの受け渡しにS3を使うと、

  • すでにAWSを使っている場合、IAMをよしなにつかするだけでよい
  • データの事前処理にAthenaを支えて便利、になるかも

ということでS3を使ってみるというのはいかがでしょうか!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?