TuneCoreの売上データCSVをS3に格納してAthenaのクエリをRe:dashのデータソースにして可視化する
2017/06/06
先日参加しましたAWS Summit Tokyo 2017で、
[JapanTaxi] Athena 指向アナリティクス 〜真面目に手を抜き価値を得よ〜(AWS Summit Tokyo 2017)を聞いてきました、
ので、S3->Athen->Re:dashの構成をやってみたくなりましたのでやってみました。
TuneCoreという国内外の音楽配信サービスのディストリビューターとして一括で仲介してくれるサービスに個人的にお世話になっておりまして、その月次レポートをS3->Athen->Re:dashで可視化してみました。
S3の設定
特に設定するところはありません。
バケットを作成して、TuneCoreからダウンロード出来るCSVをアップロードしました。
CSVは1行目とフッタにあるコメント行を削除してShift-JISからUTF-8に変換しました。
Athenaの設定
[Add Table]からウィザードを使ってCSV選択で1カラムだけのテーブル作成のSQLを生成して、そこにカラムを手書きで足しました。
こんなSQLになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
CREATE EXTERNAL TABLE IF NOT EXISTS tunecore8bangai.tunecorelist ( `application_month` string , `achievement_month` string, `store` string, `service` string, `country` string, `artist` string, `release` string, `music` string, `jan_upc` string, `isrc` string, `label` string, `sales_format` string, `unit_selling_price` double, `sales_currency` string, `sales_revenue_unit_price` double, `request_count` int, `sales_revenue_sum` double ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = ',', 'field.delim' = ',' ) LOCATION 's3://bucket-name/' TBLPROPERTIES ('has_encrypted_data'='true'); |
Re:dash用のIAMの作成
Re:dash Help Center Amazon Athena Setupに準じて設定します。
アタッチするポリシーは
AWSQuicksightAthenaAccess
と
次のポリシーです。
「my-bucket」はAthenaの[Setting] – [Query result location]を設定しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::my-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-bucket" ] } ] } |
Re:dashの設定
Re:dashのバージョンは1.0.3+b2850です。
ここからは手間取りましたが、最終的にこちらの2サイトの通りにやって出来ました。
ありがとうございます。
[Docker] ubuntu 14.04/16.04にDockerをインストール
Redash での Amazon Athena 連携に関して
Re:dashサーバにDockerをインストール
ubuntuは14.04です。
Athena ProxyサーバをDockerで起動するためにRe:dashサーバ(ubuntu)にDockerをインストールします。
1 2 3 4 5 6 7 8 9 10 11 |
$ sudo apt-get update $ sudo apt-get install apt-transport-https ca-certificates $ sudo apt-key adv \ --keyserver hkp://ha.pool.sks-keyservers.net:80 \ --recv-keys 58118E89F3A912897C070ADBF76221572C52609D $ echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list $ sudo apt-get update $ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual $ sudo apt-get update $ sudo apt-get install docker-engine |
Re:dashサーバでredash-amazon-athena-proxyを起動
1 2 3 4 5 |
$ git clone https://github.com/getredash/redash-amazon-athena-proxy.git $ cd redash-amazon-athena-proxy $ sudo docker build . $ sudo docker images |
IMAGE IDを確認して次のコマンドで使用
1 2 |
$ sudo docker run -d --name redash-amazon-athena-proxy -p 4567:4567 <IMAGE ID> |
Re:dashの .envに環境変数を追加
※環境にもよりますがイメージからRe:dashを作っている場合は、 /opt/redash/.env
1 2 3 |
export ATHENA_PROXY_URL=http://localhost:4567/query export REDASH_ADDITIONAL_QUERY_RUNNERS=redash.query_runner.athena |
Re:dashでAthenaをデータソースに設定
Re:dashのデータソースでAmazon Athenaが選択出来るようなりました。
- Name : 任意
- Type : Amazon Athena
- AWS Secret Key : 事前に作成したIAMユーザのシークレットキー
- AWS Region : Athenaのリージョン
- AWS Access key : 事前に作成したIAMユーザのアクセスキー
- S3 Staging Path : Athenaの[Setting] – [Query result location]
これでクエリーが実行出来て、ビジュアライゼーションが作成出来て、ダッシュボードに設定出来ます。
ストア別とか、曲別とか、一覧とか作ってみて、、、、、
出来た!
最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。
【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター3年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
AWS Data Pipelineを使ってDynamoDBのアイテムを全件S3バケットに書き出した
ちょっと試してみたくてやってみました。 手順はこちらのチュートリアルを参考にすす …
-
-
AWS Lambda(Python3)でSelenium + Chrome Headless + でwebスクレイピングする
インターネット上に公開されている情報をDynamoDBにつっこみたいだけなので、 …
-
-
re:dashで 「Error running query: ‘ascii’ codec can’t encode」
re:dash の画面に表示されたエラー Error running query …
-
-
Amazon RDS MySQLでCSVをload data するときに「Access denied」発生
超小ネタです。 AWSのデータベースサービスの Amazon RDSのMySQL …
-
-
NGINXで500と502のエラーが実は頻発していたらしい
先日Mackerelで当ブログの外形監視を始めたのですが、500と502のエラー …
-
-
特定AWSアカウント特定リージョンのSQSキューを削除するLambda(Python)
やりたいこと 特定アカウント内特定リージョン内のSQSキューを全部削除したいです …
-
-
「JAWS-UG Osaka 第22回勉強会 東西の中の人が語る!!! Microservices × Serverless On AWS」で運営と懇親会LTをしてきました
「JAWS-UG Osaka 第22回勉強会 東西の中の人が語る!!! Micr …
-
-
AWS Summit Tokyo 2017 Day3 開場~基調講演~Dev Day Night
AWS Summit Tokyo 2017 参加2日目のDay3です。 基調講演 …
-
-
Amazon Pollyを使って覚えたい資料を耳から身体に染み込ませる
Amazon Pollyを使うとソースコードを一切かかなくても、テキストを音声に …
-
-
AWS Lambda KMSを使って環境変数を暗号化、復号化する(Python)
Lambda内で外部APIを使用する場合などをユースケースとして、環境変数をKM …