抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

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

2019 年 12 月 20 日

通过 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 并上传源数据




步骤 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/


2019 年 12 月 20 日 15:13264

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

评论

发布
暂无评论
发现更多内容

让GitHub炸锅的深入理解MySQL实战手册,竟出自阿里云“藏经阁”

Java~~~

Java MySQL 数据库 架构 面试

GitOps系列|云原生时代,你还不懂GitOps?

极狐GitLab

security CI/CD gitops

清华大牛带领20位大厂专家耗时三年整理出这份2000页Java进阶指南

Java~~~

Java 架构 面试 微服务 多线程

写了一年golang,来聊聊进程、线程与协程

捉虫大师

golang 线程 进程 协程

Alibaba内部的10w字Java高频面试手册遭人恶意在牛客网开源下载?

Java~~~

Java 架构 面试 JVM 多线程

腾讯云TDSQL:真正面向金融行业的典型场景

腾讯云数据库

数据库 tdsql

TDSQL演进三部曲

腾讯云数据库

tdsql #数据库

Java多线程:从基本概念到避坑指南

胧月

Java 架构 后端 JVM 计算机

从动物科学到乐队鼓手,腾讯技术小哥的开源人生

腾源会

腾讯云 开源

在职字节师兄分享出了这份数据结构手册,LeetCode现已开放下载

Java~~~

Java 架构 面试 算法 刷题

实战 实时物体检测YOLOv3 CNN卷积神经网络John 易筋 ARTS 打卡 Week 63

John(易筋)

ARTS 打卡计划

33张图解析ReentrantReadWriteLock源码

程序猿阿星

源码分析 读写锁 ReentrantReadWriteLock 源码解读

Github星标百万!终于有人将Spring技术精髓收录成册

Java 白

Java 编程 程序员 架构 面试

在FL Studio中如何使用混音器的效果

懒得勤快

求阿里大神整理的分布式核心笔记出炉了,GitHub刚发布就标星85k

Java~~~

Java 负载均衡 架构 面试 分布式

滴滴最看重的SpringCloud手册曾被疯狂转载,现在学还有用吗?

Java~~~

Java 架构 面试 微服务 Spring Cloud

实用?HUAWEI高工总结出15W字的图解计算机操作系统指南手册

Java~~~

Java 架构 面试 TCP 网络协议

操作系统的IO模型

云流

Java 程序员 架构 操作系统 计算机

如何实现 Android 短视频跨页面的流畅续播?

阿里云视频云

android App Video播放器 APP开发 音视频开发

腾讯云数据库TDSQL:分布式数据库,你真的了解吗?

腾讯云数据库

数据库 tdsql

TDSQL云时代,我们需要怎样的数据库?

腾讯云数据库

数据库 tdsql

GitHub上火了这份堪称神级的SpringBoot手册,竟出自滴滴之手

Java~~~

Java spring 架构 面试 Spring Boot

三顾茅庐,七面阿里,25k*16offer,还原我的大厂面经

胧月

Java 程序员 面试 后端 计算机

有人在恶意提权吗?

BUG侦探

Linux 主机安全 提权

不吹不黑!阿里新产微服务架构进阶笔记我粉了!理论实战齐飞

Java 白

Java 程序员 架构 面试 微服务

实时消息RTM| 多活架构中的数据一致性问题

anyRTC开发者

音视频 WebRTC 数据一致性 实时消息 数据容灾

出自清华大神之手的JVM实战手册,刚上架GitHub点赞就达到85k

Java~~~

Java 架构 面试 JVM 多线程

爆赞!GitHub上首本IntelliJ IDEA操作手册,标星果然百万名不虚传

Java~~~

Java 架构 面试 IDEA 架构师

GitHub经典教材!阿里P8的这份SpringBoot精髓到底厉害在哪里?

Java~~~

Java 架构 面试 微服务 Spring Boot

一文详述如何卸载SQL Server 2019及其 DBMS

Regan Yue

数据库 SQL语言 9月日更 9 月日更

Alibaba新产!Spring+SpringBoot+SpringCloud全家桶进阶小册

Java~~~

Java spring 架构 面试 Spring Boot

Study Go: From Zero to Hero

Study Go: From Zero to Hero

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