动手实践****Amazon Athena
下面的动手的部分是基于东京区域的服务:
步骤 1:准备查询的数据
通过以下网址下载美国交通事故开放数据 https://catalog.data.gov/dataset/traffic-collision-data-from-2010-to-present
打开 Amazon S3 控制台 https://console.aws.amazon.com/s3/。
在东京区域创建一个 S3 存储桶取一个具有唯一性的名字例如 athena-demo-tokyo-trafficdata-<当前日期>
在桶内创建一个文件夹 traffic-collision-one-file 并上传源数据
步骤 2:创建一张 Athena 表并查询
2.1 使用 DDL SQL 语句创建您的 Amazon Athena 表
(1)通过以下网址打开 Athena 控制台:https://console.aws.amazon.com/athena/。(登陆的IAM user 需要有 AmazonAthenaFullAccess 策略)
(2)通过在查询栏输入“create database demo;” 并且点击 run query 创建一个新 database。
(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/';
复制代码
(4)在查询栏里输入“select * from traffic_collision_data limit 10”来观察数据含义。点击 Save as 给查询命名,以便日后重复使用。
2.2 建立逻辑视图来方便终端用户或展示工具查询
(1)统计每天发生的交通事故数量,在查询栏查询下列 SQL
SQL
SELECT date_reported, count(*) as num_accidentFROM traffic_collision_data group by date_reportedorder by date_reported;
复制代码
(2)点击 Create,选择 create view from query 并取名为 daily_accident_count_report。成功创建后查询栏会出现创建视图的 DDL 语句,日后也可通过 DDL SQL 语句创建。
(3)查询视图的内容 “select * from daily_accident_count_report”
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') ASSELECT 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_idFROM traffic_collision_data;
复制代码
(2)可以看到新建的表是一个具有分区的表,并且新的 S3 路径带有分区列信息。
步骤 3:利用 workgroups 管理查询资源
1.切换到 workgroup 面板,点击 create workgroup
2.创建一个新的 workgroup。
3.点击切换 workgroup。
4.点击 view details 可以更改 workgroup 设置,选择 Data Usage Controls 面板,添加每条查询扫过的数据量上限。
5.添加针对每个 workgroup 指定时间段扫过数据量的上限。
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 产品文档:https://docs.aws.amazon.com/zh_cn/athena/latest/ug/what-is.html
Amazon Athena Demo 视频:https://aws.amazon.com/athena/getting-started/
作者介绍:
!
### [](https://amazonaws-china.com/cn/blogs/china/tag/%E8%B4%BA%E6%B5%8F%E7%92%90/)
AWS解决方案架构师,负责AWS云计算方案的咨询和架构设计,同时致力于大数据方面的研究和应用。曾担任亚马逊大数据团队数据工程师,在大数据架构,数据管道业务处理,和Business Intelligence方面有丰富的实操经验。
复制代码
本文转载自 AWS 技术博客。
原文链接:https://amazonaws-china.com/cn/blogs/china/big-data-analysis-with-serverless-architecture-via-amazon-athena/
评论