通过 Amazon Athena 进行无服务器架构的大数据分析(二)

阅读数:1 2019 年 12 月 20 日 15:13

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

动手实践****Amazon Athena

下面的动手的部分是基于东京区域的服务:

步骤 1:准备查询的数据

  1. 通过以下网址下载美国交通事故开放数据 https://catalog.data.gov/dataset/traffic-collision-data-from-2010-to-present
  2. 打开 Amazon S3 控制台 https://console.aws.amazon.com/s3/。
  3. 在东京区域创建一个 S3 存储桶取一个具有唯一性的名字例如 athena-demo-tokyo-trafficdata-< 当前日期 >
  4. 在桶内创建一个文件夹 traffic-collision-one-file 并上传源数据

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

步骤 2:创建一张 Athena 表并查询

2.1 使用 DDL SQL 语句创建您的 Amazon Athena 表

(1) 通过以下网址打开 Athena 控制台: https://console.aws.amazon.com/athena/。(登陆的 IAM user 需要有 AmazonAthenaFullAccess 策略)

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

(2) 通过在查询栏输入“create database demo;” 并且点击 run query 创建一个新 database。

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

(3)Database 在下拉栏里选择新建的 demo,然后在查询栏里输入 create table DDL 创建一个新表。把 S3 存储桶换成步骤 1 中新建的 S3 路径。

SQL

复制代码
CREATE EXTERNAL TABLE traffic_collision_data(
dr_number string ,
date_reported string ,
date_occurred string ,
time_occurred string ,
area_id string ,
area_name string ,
reporting_district string ,
crime_code string ,
crime_code_description string ,
mo_codes string ,
victim_age string ,
victim_sex string ,
victim_descent string ,
premise_code string ,
premise_description string ,
address string ,
cross_street string ,
location string ,
zip_codes string ,
census_tracts string ,
precinct_boundaries string ,
la_specific_plans string ,
council_districts string ,
neighborhood_councils string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES ('skip.header.line.count'='1','serialization.format' = ',',
'quoteChar' = '"',
'field.delim' = ',' )
LOCATION 's3://athena-demo-tokyo-trafficdata-< 当前日期 >/traffic-collision-one-file/';

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

(4) 在查询栏里输入“select * from traffic_collision_data limit 10”来观察数据含义。点击 Save as 给查询命名,以便日后重复使用。

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

2.2 建立逻辑视图来方便终端用户或展示工具查询

(1) 统计每天发生的交通事故数量,在查询栏查询下列 SQL

SQL

复制代码
SELECT date_reported, count(*) as num_accident
FROM traffic_collision_data
group by date_reported
order by date_reported;

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

(2) 点击 Create,选择 create view from query 并取名为 daily_accident_count_report。成功创建后查询栏会出现创建视图的 DDL 语句,日后也可通过 DDL SQL 语句创建。

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

(3) 查询视图的内容 “select * from daily_accident_count_report”

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

2.3 把数据从单一 CSV 文件转化为带分区的 parquet 格式

(1) 在查询栏里键入一下 create table with SQL 语句。把 external_location 换成步骤 1 中的 S3 桶。此语句会创建一张新表和新 S3 地址,并且新 S3 地址会根据 area_id 做分区键,新数据会存为压缩的 parquet 格式可以极大的减小数据量。

SQL

复制代码
CREATE TABLE traffic_collision_data_partitioned
WITH (format='parquet',
external_location='s3://athena-demo-tokyo-trafficdata-< 当前日期 >/traffic-collision-partitioned/',
partitioned_by= ARRAY['area_id'],
parquet_compression = 'SNAPPY') AS
SELECT
DR_Number,
date_parse(date_reported,'%Y-%m-%dT%T.000') as date_reported,
time_occurred,
area_name,
reporting_district,
crime_code,
crime_code_description,
mo_codes,
victim_age,
victim_sex,
victim_descent,
premise_description,
address,
location,
date_parse(date_occurred,'%Y-%m-%dT%T.000') as date_occurred,
zip_codes,
area_id
FROM
traffic_collision_data;

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

(2) 可以看到新建的表是一个具有分区的表,并且新的 S3 路径带有分区列信息。

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

步骤 3: 利用 workgroups 管理查询资源

1. 切换到 workgroup 面板,点击 create workgroup

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

2. 创建一个新的 workgroup。

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

3. 点击切换 workgroup。

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

4. 点击 view details 可以更改 workgroup 设置,选择 Data Usage Controls 面板,添加每条查询扫过的数据量上限。

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

5. 添加针对每个 workgroup 指定时间段扫过数据量的上限。通过 Amazon Athena 进行无服务器架构的大数据分析(二)

6. 创建一个只有权限使用 adhoc workgroup 的 IAM 用户。用该用户登陆 AWS 控制台然后尝试切换成 primary workgroup 然后查询。可以看到查询报没有权限的错误。

把以下 IAM 策略赋予该用户,并把其中的 <AWS 账号 > 替换成自己的 AWS 账号(12 位数字)

Json

复制代码
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"glue:GetDatabases",
"glue:GetTables",
"glue:GetTable",
"glue:GetPartitions"
],
"Resource": [
"arn:aws:glue:*:<AWS 账号 >:catalog",
"arn:aws:glue:*:<AWS 账号 >:database/*",
"arn:aws:glue:*:<AWS 账号 >:table/*"
]
},
{
"Effect": "Allow",
"Action": [
"athena:ListWorkGroups"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"athena:StartQueryExecution",
"athena:GetQueryResults",
"athena:DeleteNamedQuery",
"athena:GetNamedQuery",
"athena:ListQueryExecutions",
"athena:StopQueryExecution",
"athena:GetQueryResultsStream",
"athena:ListNamedQueries",
"athena:CreateNamedQuery",
"athena:GetQueryExecution",
"athena:BatchGetNamedQuery",
"athena:BatchGetQueryExecution",
"athena:GetWorkGroup"
],
"Resource": [
"arn:aws:athena:*:<AWS 账号 >:workgroup/adhoc"
]
},
{
"Effect": "Allow",
"Action": [
"s3:List*",
"s3:Get*",
"s3:Put*"
],
"Resource": [
"*"
]
}
]
}

通过 Amazon Athena 进行无服务器架构的大数据分析(二)

扩展阅读:

Amazon Athena 产品文档: https://docs.aws.amazon.com/zh_cn/athena/latest/ug/what-is.html

Amazon Athena Demo 视频: https://aws.amazon.com/athena/getting-started/

作者介绍:

!
复制代码
AWS 解决方案架构师,负责 AWS 云计算方案的咨询和架构设计,同时致力于大数据方面的研究和应用。曾担任亚马逊大数据团队数据工程师,在大数据架构,数据管道业务处理,和 Business Intelligence 方面有丰富的实操经验。

本文转载自 AWS 技术博客。

原文链接: https://amazonaws-china.com/cn/blogs/china/big-data-analysis-with-serverless-architecture-via-amazon-athena/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布