关键词:Athena、QuickSight,S3
适读水平:有必定AWS基础
适读职业:数据分析,DBA
应用场景:大数据分析php
随着目前企业数字化转型的推动,业务系统产生了大量数据,如何利用好这些海量数据成为企业IT运营面临的一大难题。从传统的方案来看,须要企业自行架设Hadoop集群,因为大数据分析对数据存储和数据运算需求都比较高,因此硬件配置的需求也很高,致使整个项目成本高昂。git
在使用了云服务器之后,能够解决本地数据中心的运维难题,并经过高标准高规格的硬件和数据中心提高了总体系统的稳定性。但若是只是经过云服务器来部署,仅仅是解决了服务器运维的问题,并不能最大化的利用云端大数据分析服务的优点。数据库
在AWS上除了提供托管Hadoop服务的EMR以外,还提供了不少大数据相关的分析服务,例如数据仓库Redshift,实时数据处理Kinesis,ETL服务Glue等。安全
在AWS托管的服务上,您只须要为使用的资源付费,按需付费模式避免本地数据中心建设中的重资产投入,也避免了云服务器空闲时间致使的资源浪费。服务器
今天咱们来演示一种快速进行大数据分析的场景,无需架设服务器,实时使用SQL语言进行数据查询。网络
全球气候分析对于研究人员评估气候变化对地球天然资本和生态系统资源的影响相当重要。 这项活动须要高质量的气候数据集,这多是具备挑战性的工做,由于它们的规模和复杂性。运维
为了对他们的发现有信心,研究人员必须对他们研究的气候数据集的来源有信心。 例如,研究人员可能会试图回答这样的问题: 某个特定粮食生产区的气候变化是否会影响粮食安全? 他们必须可以轻松地查询权威和管理数据集。编辑器
美国国家环境信息中心(NCEI)维护着一个气候数据集,这个数据集是基于全球气象站的观测数据。 它是《全球历史气候网络日报》(GHCN-D)ーー一个地面站每日天气摘要的中央储存库。 它由数以百万计的有质量保证的观测数据组成,天天更新。oop
研究人员经过一个按年分隔存储的FTP服务器,以CSV格式提供天气数据。按年组织意味着一份完整的档案须要超过255个文件,传统上,一个研究人员要研究这个数据,须要把整个数据都下载到本地,为了保证使用最新的数据进行分析,他们必须天天重复下载这些数据。性能
经过AWS与NOAA的大数据合做项目,如今能够在 AWS 上得到 GHCN d 数据集的每日快照。 这些数据能够经过 Amazon S3 bucket 公开访问。已这种方式获取数据有如下几个好处:
本篇文章展现了一个使用Amazon S3,Amazon Athena,AWS Glue和Amazon QuickSight的工做流程,演示了人们从这个数据集中获取洞察力的速度。
本次工做流遵循如下工做步骤:
工做流程
完整的每日天气观测数据按年份组织在 Amazon S3桶的一个文件夹中。 Csv 格式。 数据的路径是 s3://noaa-ghcn-pds/csv/ 。
每一个文件都以1763年开始的年份命名.csv而且存储直到当前年份。
进入Athena控制台,点击AWS Glue Data Catalogj进入Glue控制台,在右侧选择表菜单,选择手动添加表
设置一个表名称并添加一个数据库
再下一步选择另外一个帐户的其余路径,输入NOAA的公共存储桶位置 s3://noaa-ghcn-pds/csv/ 。
接下来定义Schema
添加如下列,使用string类型(字符串类型)
• id
• year_date
• element
• data_value
• m_flag
• q_flag
• s_flag
• obs_time
添加好后点击完成,返回到Athena控制台,能够在左侧看到建立好的表,这里有些准备工做要作。在运行咱们的第一个Athena查询以前,要设置一个S3存储桶用于存放查询结果
与此同时,咱们也建立一些文件夹用于数据存放
设置好以后,咱们可使用表预览来建立一条查询语句
运行查询能够看到咱们的表中的数据
在刚才的查询中咱们能够看到查询语句运行的速度不是很快,咱们须要建立一个表使用CREATE TABLE AS SELECT (CTAS)来加速查询
缘由是在这个过程当中,咱们只提取一次数据,并将提取的数据以列格式(Parquet)存储在私有的 Amazon S3 bucket 中
为了说明速度的提升,这里有两个例子:
接下来是步骤:
/*converting data to Parquet and storing it in a private bucket*/ CREATE table ghcnblog.tblallyears_qa WITH ( format='PARQUET', external_location='s3://[your-bucket-name]/ghcnblog/allyearsqa/' ) AS SELECT * FROM ghcnblog.tblallyears WHERE q_flag = '';
注意将相应桶名称和表名称换成你刚才建立的。
运行后会看到有一个新的表出如今左侧的库里,接下来咱们将会在这个新的表上继续工做
提取数据并把它添加到Athena的表中
站点文本文件包含有关气象站的信息,例如位置、国籍和 ID。 这些数据保存在一个独立的文件中,不一样于每一年的观察数据。 咱们须要导入这些数据来观察天气观测的地理分布。 虽然处理这个文件有点复杂,可是将这些数据导入Athena的步骤与咱们已经完成的类似。
为了导入这些数据咱们将采起如下步骤:
1.下载 ghcnd-stations text file.
2.使用一个表格编辑器,例如Excel打开这个文件
3.另存为CSV文件
4.将这个csv文件上传到以前创建的 [your_bucket_name]/stations_raw/文件夹
5.使用Glue添加表格,就像咱们以前作的那样
在添加列步骤添加如下列
• id
• latitude
• longitude
• elevation
• state
• name
• gsn_flag
• hcn_flag
• wmo_id
点击完成后咱们看下表预览,能够看到数据已经导入成功
6.接下来依然使用CATS将数据存储为parquet格式
/*converting data to Parquet and storing it in a private bucket*/ CREATE table ghcnblog.tblghcnd_stations_qa WITH ( format='PARQUET', external_location='s3://athena-cx-bucket/ghcnblog/stations/' ) AS SELECT * FROM ghcnblog.tblghcnd_stations
至此,咱们已经准备好了数据并导入到Athena之中
简单数据分析
接下来咱们将演示几个数据分析的例子
1.查询从1763年以来观测点的数量
SELECT count(*) AS Total_Number_of_Observations FROM ghcnblog.tblallyears_qa;
2.查询地面站的数量
SELECT count(*) AS Total_Number_of_Stations FROM ghcnblog.tblghcnd_stations_qa;
3.地球平均气象参数
下图显示了计算自1763年以来地球平均最高温度(摄氏度)、平均最低温度(摄氏度)和平均降雨量(毫米)查询。 在查询中,咱们必须将数据值从 String 变量转换为 Real 变量。 咱们还必须除以10,由于温度和降水量的测量值,是它们各自单位的十分之一。
有关这些细节和元素代码(TMIB、 TMAX 和 PRCP)的详细信息,请参阅自述文件。
SELECT element, round(avg(CAST(data_value AS real)/10),2) AS value FROM ghcnblog.tblallyears_qa WHERE element IN ('TMIN', 'TMAX', 'PRCP') GROUP BY element;
若是咱们能够在这个数据集上运行简单的查询(好比这个查询) ,并接受结果是正确的,那将会很是方便。 前面的查询假设自1763年以来,全世界的气象站均匀平均地分布。 事实上,气象站的数量和分布随时间而变化。
4.可视化显示地球上气象站的数量增加状况
接下来咱们要引入Amazon QuickSight.进行数据可视化展现,在实验前您必须配置好QuickSight,包含注册,受权QuickSight访问Athena和S3。
接着返回主菜单,选择新分析,而后选择新数据集,在下方数据源里选择Athena,输入咱们在Athena建立的数据库名字ghcnblog,而后点击建立数据源
选择使用自定义SQL,输入如下语句
SELECT DISTINCT id AS numberofstations, substr(year_date,1,4) as year FROM ghcnblog.tblallyears_qa GROUP BY substr(year_date,1,4), id ORDER BY substr(year_date,1,4)
选择确认查询,并选择直接查询数据,点击Visualize,在可视化图表里选择折线图,把year数据做为X轴,把number_of_stations 做为值,便可获得一张全球气象站数量的增加曲线图
1836年数据集中美国第一次设立气象站。 为了深刻了解美国观测的发展,咱们从主数据源(tblallyears qa)中提取了美国数据的子集。 从1836年到2016年,这个数据集每30年收集一次数据。 此查询生成一个大数据集。 为了提升性能,使用前面描述的过程将查询保存为存储在 Amazon S3 bucket 中的表。 在Athena中执行如下语句。
CREATE TABLE ghcnblog.tbl1836every30thyear WITH ( format='PARQUET', external_location='s3://[your-bucket-name]/ghcnblog/1836every30years/' ) AS SELECT TA.id as id, substr(TA.year_date,1,4) as year, TS.state, CAST(TS.longitude as real) as longitde, CAST(TS.latitude as real) as latitude, element, CAST(data_value as real) as data_value FROM "ghcnblog".tblallyears_qa as TA, "ghcnblog".tblghcnd_stations_qa as TS WHERE substr(TA.year_date,1,4) IN ('1836', '1866', '1896', '1926', '1956', '1986', '2016') AND substr(TA.id,1,2) = 'US' AND state <> 'PI' AND TRIM(TA.id) = TRIM(TS.id) GROUP BY TA.id, substr(TA.year_date,1,4), state, longitude, latitude, element, data_value;
而后在QuickSight中建立一个新的分析,使用建立好的新表做为数据源
并使用如下自定义SQL
SELECT DISTINCT(id) AS number_of_stations, year, state FROM ghcnblog.tbl1836every30thyear GROUP BY year, id, state ORDER BY year
在接下来的可视化界面里,选择地球上的点做为图像类型,地理位置数据选择state,size选择气象站数量,并使用总数统计,颜色选择年份
经过自定义SQL也能够计算出美国每一个州的平均温度等数据
经过本文演示,咱们了解到经过Athena,Glue和QuickSight这个产品组合,能够快速的构建一个可视化大数据分析平台,而且无需架设服务器和维护Hadoop集群。对于快速验证分析数据,做出商业决策是很是便利的。
同时这些服务的计费也都是经过分析的数据量来收取,大大下降了资源的闲置成本,在数据分析得出结果后还能够把数据进一步存放到成本更低的S3 Glacier中归档,进一步节省成本。
做者:光环云 陈昕
原文:查看原文