订单交易数据操作的主要内容包括以下几部分:
●订单交易数据的数据库以及表的构建。
●表数据的加载与覆盖。
●表数据的常见查询操作。
在这里我们通过Spark Shell进行一系列的订单交易数据演示。下面的代码是在Spark Shell的环境下运行的。
(1)去除过多的日志。通过调用Java语言中的Logger的两个getLogger()方法创建两个Logger对象,然后调用它的setLevel方法设置日志消息输出的级别分别是Level.WARN和Level.OFF,在各自的Logger对象中,低于设置的Logger级别的日志信息将被丢弃。
(2)初始化HiveContext。在这里需要注意两点:首先要确认现在使用的是否是支持Hive的Spark版本;并且Hive的配置文件hive-site.xml已经存放到Spark的$HOME/conf目录下。
使用下面代码初始化HiveContext。
(3)创建表和数据库。在Hive中我们定义了一个数据库saledata和三个表tblDate tblStock和tblStockDetail。
1)在spark-shell交互界面输入命令:hiveContext.hql("CREATE DATABASE SALEDA-TA"),创建数据库saledata。
2)在spark-shell交互界面输入命令:hiveContext.hql("use SALEDATA"),使用数据库saledata。
3)在spark-shell交互界面输入命令:hiveContext.hql("CREATE TABLE tblDate(dateId string,theyearmonth string,theyear string,themonth string,thedate string,theweek string,theweeks string,thequot string,thetenday string,thehalfmonth string)ROW FORMAT DELIMITED FIELDS TERMINATED BY′,′LINES TERMINATED BY′\n′"),创建表tblDate,这个表定义了日期的分类,包括:日期、年月、年、月、日、周几、第几周、季度、旬、半月。
4)创建表tblStock。这个表里定义了订单表头,包括订单号、交易位置、交易日期
5)创建表tblStockDetail。这个表定义了订单明细,包括订单号(ordernumber)、行号(rownum)、货品(itemid)、数量(qty)、金额(price)、销售额(amount)。
(4)加载qryTheDate.txt、qryStockDetail.txt、qryStock.txt三个文件,分别生成三个表tblDate、tblStockDetail、tblStock的数据。
其中qryTheDate.txt、qryStockDetail.txt、qryStock.txt三个文件的表的数据,笔者提供了下载链接,可以通过百度网盘下载使用:http://pan.baidu.com/s/1dD0JCpN。
(5)表数据的覆盖操作:当加载数据时,可以通过关键字OVERWRITE INTO实现覆盖表的原有数据的目的。
(6)表数据的查询操作。
1)查询表tblStock的数据量。
由以上运行结果可知,表tblStock一共有21154条数据。
2)查询表tblStockDetail的数据量。
由以上运行结果可知,表tblStock一共有287950条数据(www.xing528.com)
3)查询表tblStockDate的数据量。
由以上运行结果可知,表tblStockDate一共有4383条数据。
(7)复杂查询语句操作。
1)表tblStock和表tblStockDetail联接后,查询所有订单的总销售额。在spark-shell交互界面输入:hiveContext.hql("select sum(tblStockDetail.amount)from tblStock join tblStockDe-tail on tblStock.ordernumber=tblStockDetail.ordernumber").show命令,完成查询。
由上面的运行结果可知,表tblStock和表tblStockDetail联接后,所有订单的总销售额结果为:68100782元。
2)表tblStock和表tblStockDetail以别名的方式联接后,查询所有订单的总销售额。
从上面的运行结果可以看到,即使表tblStock和表tblStockDetail分别以别名a和b的方式进行联接,最终查询出来的所有订单的总销售额仍然是68100782元。
3)tblStock、tblStockDetail和tbldate三个表联接后,查询所有订单的总销售额。
由上面的运行结果可知,tblStock、tblStockDetail和tbldate三个表联接后,所有订单的总销售额是68099079元。
4)tblStock、tblStockDetail和tbldate三个表以别名的方式联接后,查询所有订单的总销售额。
从上面的运行结果可以看到,即使tblStock、tblStockDetail和tbldate三个表以别名的方式联接后,最终查询出来的所有订单的总销售额仍然是68099079元。
5)查询所有订单中每年的销售单数和销售总额。
由上面的运行结果可知,tblStock、tblStockDetail和tbldate三个表联接后,运行结果是2004~2010年所有订单中每年的销售单数和销售总额。比如,2004年每年销售单数是1094,销售总额是3265696元。
6)查询tblStock、tblStockDetail和tbldate三个表联接后每年每种货品的销售金额。
由上面的运行状况可知,tblStock、tblStockDetail和tbldate三个表联接后,运行结果是2004~2010年每年每种货品的销售金额。比如2007年货品YA214367230101的销售金融是11143元。
7)查询tblStock、tblStockDetail和tbldate三个表联接后每年单品的销售的最大金额。同样使用HiveContext对象的hql方法进行查询操作,一个SQL语句的字符串作为hql方法的参数来实现每年单品销售最大金额的查询。
由上面的运行状况可知,tblStock、tblStockDetail和tbldate三个表联接后,最终显示的2004~2010年每年单品销售的最大金额。例如2010年单品的销售最大金额是4494元。
8)查询所有订单中每年最畅销的货品:每年每种货品的销售金额和每年单品销售的最大金额相符,就是所有订单中每年最畅销的货品。由于SQL语句是MySQL的基础知识,这里我们不做具体的介绍。
由上面的运行状况可知,tblStock、tblStockDetail和tbldate三个表联接后,最终显示的2004~2010年所有订单中每年最畅销的货品。例如2004年订单JY424420810101为最畅销货品,销售额是53374元。
至此,使用hiveql语句对订单交易数据的操作进行完毕,这个案例是Spark SQL在生产环境中一个很有代表性的案例,望大家仔细揣摩,好好研究实践一下。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。