分享

使用Hadoop进行电子商务数据分析,了解实际工作是怎么进行的

问题导读

1.实际工作中,分析数据有哪些工作?
2.本文涉及了几张表?
3.分析了几张表?
4.本文分析数据任务是什么?




关注最新经典文章,欢迎关注公众号


我们大数据开发与传统开发到底有什么区别?很多同学对于大数据开发,仍然抱有神秘感。如果我们要分析数据,我们需要做哪些工作。是不是我们只要用sql简单的统计下就可以了。

说的其实也对,因为本身的核心业务就是分析,但是为了分析我们需要做大量的工作,这也是我们在实际工作需要做的。

比如首先我们需要有待分析的数据,这里待分析的数据是mysql的数据。数据有了,我们要使用大数据,因为我们需要将数据转移到hdfs上,转移之后,我们在使用hive进行分析。这就是我们实际工作中,与我们理想课程的学习的区别。这里面不止有技术,而且涉及不断重复的工作。当你已经入职工作之后,或许你会看到其实用到的技术也就那样,剩下的就是不断重复,而我们大多数公司,其实也就是不断的重复而已。

在这里,我们提供了一个电子商务公司的商业用例,该公司希望分析他们的交易并从中获取一些有用的建议,这对他们的业务发展很有用。
以下是电子商务公司的数据库设计E-R图。

1.mysql_database_design.png

(对于上面未做过业务的学生,及公司想做这方面的业务,可以学习和借鉴,我们可以看到上面关系及有多少张表)


1.待分析数据
让我们从根据这个E-R图表创建表开始。
首先,我们将创建一个数据库来存储我们的表。 我们将数据库命名为ecom。
  1. create database ecom;
  2. use ecom;
复制代码

我们现在已经成功创建了数据库,并将其移动到该数据库中。 我们可以在下面的屏幕截图中看到相同的内容:

2.database_creation.png

现在,我们将根据E-R图创建电子商务网站所需的所有表。
创建表user_account
  1. create table user_account
  2. (
  3. ac_no int,
  4. user_id varchar(30),
  5. user_pswd varchar(30),
  6. date datetime,
  7. no_of_visit int,
  8. no_of_trnsc int,
  9. trnsc_amt int,
  10. primary key(ac_no)
  11. );
复制代码

插入数据
  1. insert into user_account values(125,'a123','pp284','2011-04-14',5,6,100);insert into user_account values(126,'a124','rr999','2012-06-13',2,3,1000);
  2. insert into user_account values(127,'a125','ab888','2010-07-15',3,9,5000);
  3. insert into user_account values(128,'a126','bb900','2016-05-15',1,8,7000);
  4. insert into user_account values(129,'a127','rt007','2012-07-14',4,5,4000);
  5. insert into user_account values(130,'a128','ss008','2013-03-15',6,2,8000);
复制代码

创建表user_session_details
  1. create table user_session_details(
  2. ac_no int,
  3. session_no int,
  4. ip_address varchar(30),
  5. no_of_clicks int,
  6. date datetime,
  7. primary key(session_no),
  8. foreign key(ac_no) references user_account(ac_no)
  9. );
复制代码

插入数据
  1. insert into user_session_details values(130,11,'10.23.130.162',5,'2016-05-14');
  2. insert into user_session_details values(130,10,'11.26.135.167',5,'2014-09-15');
  3. insert into user_session_details values(125,9,'11.58.123.151',3,'2012-10-13');
  4. insert into user_session_details values(127,3,'11.33.111.188',2,'2015-01-14');
  5. insert into user_session_details values(129,15,'11.37.101.142',7,'2014-10-17');
  6. insert into user_session_details values(128,8,'11.67.100.123',6,'2012-09-12');
复制代码

创建表shopping_cart_details
  1. create table shopping_cart_details
  2. (
  3. ac_no int,
  4. cart_num int,
  5. active_status boolean,
  6. expire_date datetime,
  7. primary key(cart_num),
  8. foreign key(ac_no) references user_account(ac_no)
  9. );
复制代码

插入数据
  1. insert into shopping_cart_details values(128,144,'0','2014-11-15');
  2. insert into shopping_cart_details values(125,178,'0','2016-03-13');
  3. insert into shopping_cart_details values(126,156,'1','2013-07-14');
  4. insert into shopping_cart_details values(127,158,'1','2015-02-15');
  5. insert into shopping_cart_details value(130,161,'1','2016-04-15');
  6. insert into shopping_cart_details value(129,190,'1','2013-01-13');
复制代码

创建表库存详细信息
  1. create table inventory_item_details
  2. (
  3. inven_item_no int,
  4. title int,
  5. price int,
  6. date datetime,
  7. primary key(inven_item_no)
  8. );
复制代码

插入数据
  1. insert into inventory_item_details values(188,78,1500,'2013-10-15');
  2. insert into inventory_item_details values(122,54,5000,'2014-09-14');
  3. insert into inventory_item_details values(167,56,4500,'2015-11-11');
  4. insert into inventory_item_details values(134,66,4000,'2014-01-16');
  5. insert into inventory_item_details values(156,35,3000,'2015-12-07');
  6. insert into inventory_item_details values(177,88,6000,'2013-02-17');
复制代码

创建表地址
  1. create table address
  2. (
  3. adrss_no int,
  4. name varchar(30),
  5. adrss_1 varchar(30),
  6. adrss_2 varchar(30),
  7. city varchar(30),
  8. state varchar(30),
  9. zip int,
  10. primary key(adrss_no)
  11. );
复制代码

插入数据
  1. insert into address values(13,'Blossoms','KS layout','Marathalli','Bangalore','Karnataka',560037);
  2. insert into address values(15,'Prestige','Ecity','HSR Layout','Bangalore','Karnataka',560048);
  3. insert into address values(16,'Orchid','vimaan nagar','Whitefield','Pune','Maharashtra',460056);
  4. insert into address values(24,'Alpino','KS layout','connaught place','Delhi','New Delhi',460008);
  5. insert into address values(18,'Galaxy','BTM Layout','Cunningham road','Bangalore','Karnataka',560027);
  6. insert into address values(11,'Pratiksha','TR layout','Andheri East','Mumbai','Maharashtra',760037);
复制代码

创建表credit_card_details
  1. create table credit_card_details
  2. (
  3. ac_no int,
  4. adrss_no int,
  5. ccard_no int,
  6. card_no varchar(30),
  7. holder_name varchar(30),
  8. expire_date datetime,
  9. primary key(ccard_no),
  10. foreign key(ac_no) references user_account(ac_no),
  11. foreign key (adrss_no) references address(adrss_no)
  12. );
复制代码

插入数据
  1. insert into credit_card_details values(126,13,345,'AB24563789','Shalini','2019-05-12');
  2. insert into credit_card_details values(125,15,679,'HD54654458','Sakshi','2020-06-11');
  3. insert into credit_card_details values(127,24,145,'KK98735476','Kiran','2021-11-18');
  4. insert into credit_card_details values(128,11,211,'AA54673825','Alex','2025-08-14');
  5. insert into credit_card_details values(129,18,978,'CB64738463','Rose','2023-01-16');
  6. insert into credit_card_details values(130,16,667,'BB37845678','Lisa','2021-10-10');
复制代码

创建表payment_details
  1. create table payment_details
  2. (
  3. ccard_no int,
  4. payment_no int,
  5. amt int,
  6. state varchar(30),
  7. date datetime,
  8. primary key(payment_no),
  9. foreign key(ccard_no) references credit_card_details(ccard_no)
  10. );
复制代码

插入数据
  1. insert into payment_details values(679,80,6600,'success','2014-11-16');
  2. insert into payment_details values(345,67,8000,'success','2014-06-21');
  3. insert into payment_details values(211,56,9000,'success','2015-02-25');
  4. insert into payment_details values(145,78,1000,'failed','2015-05-22');
  5. insert into payment_details values(667,12,5000,'success','2013-12-19');
  6. insert into payment_details values(978,24,2000,'failed','2015-07-11');
复制代码

创建表invoice_details
  1. create table invoice_details
  2.   (
  3.   invoice_num int,
  4.   creation_date datetime,
  5.   session_no int,
  6.   ccard_no int,
  7.   adrss_no int,
  8.   primary key(invoice_num),
  9.   foreign key(session_no) references user_session_details(session_no),
  10.   foreign key(ccard_no) references credit_card_details(ccard_no),
  11.   foreign key(adrss_no) references address(adrss_no)
  12.   );
复制代码

插入数据
  1. insert into invoice_details values(188,'2014-02-05',11,345,15);
  2. insert into invoice_details values(101,'2014-04-07',10,145,13);
  3. insert into invoice_details values(111,'2015-03-10',03,211,16);
  4. insert into invoice_details values(197,'2015-06-15',09,978,11);
  5. insert into invoice_details values(125,'2014-07-21',08,679,24);
  6. insert into invoice_details values(167,'2015-01-11',15,667,18);
复制代码

创建表order_details
  1. create table order_details
  2. (
  3. order_num int,
  4. payment_no int,
  5. ac_no int,
  6. invoice_num int,
  7. order_date datetime,
  8. total_amt int,
  9. state varchar(30),
  10. primary key(order_num),
  11. foreign key(ac_no) references user_account(ac_no),
  12. foreign key(payment_no) references payment_details(payment_no),
  13. foreign key(invoice_num) references invoice_details(invoice_num)
  14. );
复制代码

插入数据
  1. insert into order_details values(16,80,125,188,'2015-08-14',6000,'placed');
  2. insert into order_details values(18,56,127,111,'2014-05-12',8000,'cancelled');
  3. insert into order_details values(21,67,126,101,'2015-01-10',9000,'cancelled');
  4. insert into order_details values(28,12,129,197,'2015-02-18',4000,'placed');
  5. insert into order_details values(39,78,128,125,'2014-01-16',7000,'placed');
  6. insert into order_details values(38,24,130,167,'2015-06-19',5500,'not placed');
复制代码

创建表shipping_details
  1. create table shipping_details(
  2. adrss_no int,
  3. order_num int,
  4. invoice_num int,
  5. shipping_no int,
  6. shipping_method varchar(30),
  7. shipping_charge int,
  8. state varchar(30),
  9. shipping_date datetime,
  10. primary key(shipping_no),
  11. foreign key(adrss_no) references address(adrss_no),
  12. foreign key(order_num)references order_details(order_num),
  13. foreign key(invoice_num)references invoice_details(invoice_num)
  14. );
复制代码

插入数据
  1. insert into shipping_details values(13,16,188,109,'EKART',1000,'delivered','2015-09-12');
  2. insert into shipping_details values(15,18,111,105,'FIRST FLIGHT',6000,'cancelled','2014-01-11');
  3. insert into shipping_details values(24,21,101,110,'DHL',2000,'cancelled','2015-04-09');
  4. insert into shipping_details values(16,39,125,111,'EKART',3000,'cancelled','2014-10-15');
  5. insert into shipping_details values(11,38,197,124,'INDIA POST',4000,'delivered','2015-08-14');
  6. insert into shipping_details values(18,28,167,178,'BLUE DART',5000,'delivered','2015-02-18');
复制代码

创建表order_item_details
  1. create table order_item_details
  2. (
  3. order_item_no int,
  4. quantity int,
  5. order_num int,
  6. shipping_no int,
  7. inven_item_no int,
  8. primary key(order_item_no),
  9. foreign key(order_num) references order_details(order_num),
  10. foreign key(shipping_no) references shipping_details(shipping_no),
  11. foreign key(inven_item_no) references inventory_item_details(inven_item_no)
  12. );
复制代码

插入数据
  1. insert into order_item_details values(111,13,16,109,188);
  2. insert into order_item_details values(112,10,21,105,167);
  3. insert into order_item_details values(189,9,18,110,122);
  4. insert into order_item_details values(127,8,39,124,156);
  5. insert into order_item_details values(199,14,38,178,134);
  6. insert into order_item_details values(146,15,28,111,177);
复制代码

创建表invoice_history
  1. create table invoice_history
  2. (
  3. invoice_state int,
  4. state_desc varchar(30),
  5. notes varchar(30),
  6. date datetime,
  7. invoice_num int,
  8. foreign key(invoice_num) references invoice_details(invoice_num)
  9. );
复制代码

插入数据
  1. insert into invoice_history values(1,'Valid','Good','2012-09-24',188);
  2. insert into invoice_history values(0,'Invalid','Not good','2015-01-05',101);
  3. insert into invoice_history values(0,'Invalid','Not good','2012-09-11',111);
  4. insert into invoice_history values(1,'valid','Good','2012-09-09',197);
  5. insert into invoice_history values(1,'valid','Good','2012-09-14',167);
  6. insert into invoice_history values(0,'Invalid','Not good','2014-08-24',125);
复制代码

创建表order_items_history
  1. create table order_items_history
  2. (
  3. seq_no int,
  4. amt int,
  5. state varchar(30),
  6. notes varchar(30),
  7. date datetime,
  8. order_item_no int,
  9. primary key (seq_no),
  10. foreign key(order_item_no) references order_item_details(order_item_no)
  11. );
复制代码

插入数据
  1. insert into order_items_history values(10,7000,'Delivered','Good','2014-09-12',111);
  2. insert into order_items_history values(11,8000,'cancelled','not good','2015-05-10',112);
  3. insert into order_items_history values(12,9000,'Cancelled','not good','2014-10-08',127);
  4. insert into order_items_history values(13,5000,'Cancelled','Not good','2015-03-14',189);
  5. insert into order_items_history values(14,6000,'Delivered','Good','2015-06-11',199);
  6. insert into order_items_history values(15,3000,'Delivered','Good','2014-07-13',146);
复制代码

创建表card_details
  1. create table cart_details
  2. (
  3. c_no int,
  4. inven_item_no int,
  5. state varchar(30),
  6. cart_num int,
  7. date datetime,
  8. quantity int,
  9. primary key(c_no),
  10. foreign key(inven_item_no)references inventory_item_details(inven_item_no),
  11. foreign key(cart_num) references shopping_cart_details(cart_num)
  12. );
复制代码

插入数据
  1. insert into cart_details values(1,188,'0',144,'2016-11-15',13);
  2. insert into cart_details values(2,122,'0',178,'2011-03-13',9);
  3. insert into cart_details values(3,167,'1',156,'2015-07-14',10);
  4. insert into cart_details values(4,134,'1',158,'2015-02-15',14);
  5. insert into cart_details value(5,156,'1',161,'2016-06-15',8);
  6. insert into cart_details value(6,177,'1',190,'2015-01-13',15);
复制代码

这样,我们总共按照数据库设计创建了所有14个表。 我们还在这些表中插入了一些数据。

3.show_tables.png


2.转移数据到hdfs
我们现在准备好了数据库。 唯一剩下的就是要对这些数据进行大数据分析。 因此,首先,我们需要将此数据移动到HDFS中。 我们使用Sqoop做到这一点。
我们将实现Sqoop Incremental Import,以便从MySQL逐步将这些数据导入HDFS。
下面是用于逐步将此数据传输到HDFS的Sqoop脚本。 首先,我们将传输MySQL表中存在的数据。 接下来,当MySQL表更新时,我们需要在Sqoop import命令中指定最后一个值,以便将所有新添加的记录导入HDFS。

Sqoop增量导入
传输user_account数据
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table user_account --target-dir '/ecom/user_account' --incremental append --check-column ac_no -m 1  --driver com.mysql.jdbc.Driver
复制代码

运行此作业后,将获得作业指标中的“最后一个值选项”。 记下检查列记录的最后一个值,下次要插入一些新数据时,需要提到最后一个值,这里最后一个值是130,我们在Sqoop命令中提到它,如下所示。
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table user_account --target-dir '/ecom/user_account' --incremental append --check-column ac_no --last-value 130 -m 1  --driver com.mysql.jdbc.Driver
复制代码

转移credit_card_details数据

  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table credit_card_details --target-dir '/ecom/credit_card_details' --incremental append --check-column ccard_no -m 1  --driver com.mysql.jdbc.Driver
复制代码


运行此作业后,将获得作业指标中的“最后一个值选项”,记下检查列记录的最后一个值。 下次要插入新数据时,需要提及最后一个值。 这里的最后一个值是978,我们将在Sqoop命令中提到它,如下所示。
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table credit_card_details --target-dir '/ecom/credit_card_details' --incremental append --check-column ccard_no --last-value 978 -m 1  --driver com.mysql.jdbc.Driver
复制代码



传输address数据
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table address --target-dir '/ecom/address' --incremental append --check-column adrss_no -m 1  --driver com.mysql.jdbc.Driver
复制代码


运行此作业后,将获得作业指标中的“最后一个值选项”。 记下检查列记录的最后一个值,下次要插入此新数据时,需要提及最后一个值。 这里,最后一个值是24,我们在Sqoop命令中提到它,如下所示:
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table address --target-dir '/ecom/address' --incremental append --check-column adrss_no --last-value 24 -m 1  --driver com.mysql.jdbc.Driver
复制代码

转移Payment_details数据
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table payment_details --target-dir '/ecom/payment_details' --incremental append --check-column payment_no -m 1  --driver com.mysql.jdbc.Driver
复制代码

运行此作业后,将获得作业指标中的“最后一个值选项”。 记下检查列记录的最后一个值,下次要插入此新数据时,需要提及最后一个值。 这里,最后一个值是80,我们在Sqoop命令中提到它,如下所示:
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table payment_details --target-dir '/ecom/payment_details' --incremental append --check-column payment_no --last-value 80 -m 1  --driver com.mysql.jdbc.Driver
复制代码


转移Shipping_details数据
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table shipping_details --target-dir '/ecom/shipping_details' --incremental append --check-column shipping_no -m 1  --driver com.mysql.jdbc.Driver
复制代码


运行此作业后,将获得作业指标中的“最后一个值选项”。 记下检查列记录的最后一个值,下次要插入此新数据时,需要提及最后一个值。 这里,最后一个值是178,我们在Sqoop命令中提到它,如下所示:
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table shipping_details --target-dir '/ecom/shipping_details' --incremental append --check-column shipping_no --last-value 178 -m 1 --driver com.mysql.jdbc.Driver
复制代码


转移order_items_history数据
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table order_items_history --target-dir '/ecom/order_items_history' --incremental append --check-column seq_no -m 1  --driver com.mysql.jdbc.Driver
复制代码



运行此作业后,您将获得作业指标中的“最后一个值选项”。 记下检查列记录的最后一个值,下次要插入此新数据时,需要提及最后一个值。 这里,最后一个值是15,我们在Sqoop命令中提到它,如下所示:
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table order_items_history --target-dir '/ecom/order_items_history' --incremental append --check-column seq_no --last-value 15 -m 1  --driver com.mysql.jdbc.Driver
复制代码



转移Order_item_details数据
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table order_item_details --target-dir '/ecom/order_item_details' --incremental append --check-column order_item_no -m 1  --driver com.mysql.jdbc.Driver
复制代码

运行此作业后,将获得作业指标中的“最后一个值选项”。 记下检查列记录的最后一个值,下次要插入此新数据时,需要提及最后一个值。 这里,最后一个值是199,我们在Sqoop命令中提到它,如下所示:
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table order_item_details --target-dir '/ecom/order_item_details' --incremental append --check-column order_item_no --last-value 199 -m 1 --driver com.mysql.jdbc.Driver
复制代码



转移Order_details数据
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table order_details --target-dir '/ecom/order_details' --incremental append --check-column order_num -m 1  --driver com.mysql.jdbc.Driver
复制代码

运行此作业后,您将获得作业指标中的“最后一个值选项”。 记下检查列记录的最后一个值,下次要插入此新数据时,需要提及最后一个值。 这里,最后一个值是39,我们在Sqoop命令中提到它,如下所示:
  1. sqoop import --connect jdbc:mysql://localhost/ecom --username 'root' --P --table order_details --target-dir '/ecom/order_details' --incremental append --check-column order_num --last-value 39 -m 1  --driver com.mysql.jdbc.Driver
复制代码



我们已经成功导出了分析所需的内容。 您可以在下面的屏幕截图中看到相同的内容:
4.sqoop_data_hdfs.png

3.创建Hive外表
让我们看看如何使用Hive分析这些数据。
首先,我们将在Hive中创建一个数据库,如下所示:

  1. create database ecom;
  2. use ecom;
复制代码


我们已经成功创建了数据库,我们也进入了数据库。

5.database_hive.png

现在,我们将在Hive中创建外部表,引用HDFS中存在的数据的位置。 即使数据被更新,我们也可以在Hive中查询更新的数据,因为我们指的是数据的位置。 如果我们也删除了表,我们的数据将出现在该特定目录中。
创建user_account表

  1. create external table user_account(
  2. ac_no int,
  3. user_id STRING,
  4. user_pswd STRING,
  5. date1 string,
  6. no_of_visits int,
  7. no_of_trnsc int,
  8. trnsc_amt int)
  9. ROW FORMAT DELIMITED
  10. FIELDS TERMINATED BY ','
  11. LOCATION '/ecom/user_account';
复制代码


6.account_table.png

创建order_details表
  1. create external table order_details(
  2. order_num int,
  3. payment_no int,
  4. ac_no int,
  5. invoice_num int,
  6. order_date string,
  7. total_amt int,
  8. state string)
  9. ROW FORMAT delimited
  10. FIELDS TERMINATED BY ','
  11. LOCATION '/ecom/order_details';
复制代码


7.order_details_table.png

创建order_item_details表
  1. create external table order_item_details(
  2. order_item_no int,
  3. quantity int,
  4. order_num int,
  5. shipping_no int,
  6. inven_item_no int)
  7. ROW FORMAT delimited
  8. FIELDS TERMINATED BY ','
  9. LOCATION '/ecom/order_item_details';
复制代码


8.order_item_details_table.png

创建表order_items_history表
  1. create external table order_items_history(
  2. seq_no int,
  3. amt int,
  4. state string,
  5. notes string,
  6. date1 string,
  7. order_item_no int)
  8. row format delimited
  9. fields terminated by ','
  10. location '/ecom/order_items_history';
复制代码


9.order_items_history_table.png

创建shipping_details表
  1. create external table shipping_details(
  2. adrss_no int,
  3. order_num int,
  4. invoice_num int,
  5. shipping_no int,
  6. shipping_method string,
  7. shipping_charge int,
  8. state string,
  9. shipping_date string)
  10. row format delimited
  11. fields terminated by ','
  12. location '/ecom/shipping_details';
复制代码


10.shipping_details_table.png

创建payment_details表
  1. create external table payment_details(
  2. ccard_no int,
  3. payment_no int,
  4. amt int,
  5. state string,
  6. date1 string)
  7. row format delimited
  8. fields terminated by ','
  9. location '/ecom/payment_details';
复制代码


11.payment_details_table.png

创建address表

  1. create external table address(
  2. adrss_no int,
  3. name string,
  4. adrss_1 string,
  5. adrss_2 string,
  6. city string,
  7. state string,
  8. zip int)
  9. row format delimited
  10. fields terminated by ','
  11. location '/ecom/address';
复制代码


12.address_table.png

创建credit_card_details表
  1. create external table credit_card_details(
  2. ac_no int,
  3. adrss_no int,
  4. ccard_no int,
  5. card_no string,
  6. holder_name string,
  7. expire_date string)
  8. row format delimited
  9. fields terminated by ','
  10. location '/ecom/credit_card_details';
复制代码


13.credit_card_table.png

在这里,我们在Hive中创建了分析部分所需的8个表,并且数据也填充到这些表中。 您可以在下面的屏幕截图中看到8个表格:
14.show_tables.png

4.分析数据
1.分别查找各个客户在每个季度购买的各种商品的详细信息。
在这个问题陈述中,我们需要找出各个客户在一年中的每个季度购买的各种商品。 在这里,我们需要从库存中找到item_no,从user_account中找出客户的ac_no,并从项目历史中找到购买的商品的日期。
以下是Hive查询,以查找上述详细信息。

  1. select account.ac_no as ac_no,COLLECT_SET(order_item_details.inven_item_no) as item_no_list,SUM(order_item_details.quantity) as quantity,COLLECT_SET(order_items_history.date1) as order_date from user_account account JOIN order_details details ON (account.ac_no=details.ac_no) JOIN order_item_details ON (details.order_num=order_item_details.order_num) JOIN order_items_history ON (order_item_details.order_item_no=order_items_history.order_item_no) where order_items_history.date1>='2015-05-01' AND order_items_history.date1<='2015-08-31'  group by account.ac_no;
复制代码

2.与过去相比,世界上哪个地区的客户数量和购买总量最多。
在此问题陈述中,我们需要找出过去世界上哪个地区拥有更多客户及其总购买量。 为此,我们将在状态上检查详细信息,并找出哪个州拥有多少客户和这些客户的总购买量。
我们可以从地址表中找到有关状态的信息,客户将从user_account表中计算,他们的交易将从user_account表本身计算得出。
下面给出了一个可用于评估上述问题陈述的Hive查询。

  1. select addres.state as state,COLLECT_SET(account.ac_no) as ac_no_list,COUNT(account.ac_no) as count_ac_no,SUM(account.trnsc_amt) as sum_of_amount from user_account account JOIN order_details details ON account.ac_no=details.ac_no JOIN  shipping_details ship ON details.order_num=ship.order_num JOIN address addres ON ship.adrss_no=addres.adrss_no group by addres.state;
复制代码


我们可以在下面的屏幕截图中看到结果:

16.ps2_output.png

当数据更新时,即使这样,我们也可以在Hive中运行相同的查询,Hive会在Hive中的数据自动更新时为我们提供更新的结果,因为我们已经将数据集位置引用到HDFS中的外部路径。



本帖被以下淘专辑推荐:

已有(7)人评论

跳转到指定楼层
yongjian3311 发表于 2018-9-18 15:59:43
其实流程还是那个分析流程,就是把分析平台从关系型数据库放到了大数据平台
回复

使用道具 举报

clixiang 发表于 2018-9-20 16:17:42
各位大佬,我想问几个问题:

1、按上面的用法,用大数据平台分析数据,实际上就是一堆的联表查询吗?这个性能会不会有问题?如果要实时去表里边查询数据,都是实时执行联表的HQL语句?
2、如果要做很多不同类型的数据分析,要建立一些结果表来存放HQL的执行结果不?
3、Mysql有多少个表,Hive也要建立对应的表么?

请各位大佬赐教。
回复

使用道具 举报

bioger_hit 发表于 2018-9-21 12:37:08
clixiang 发表于 2018-9-20 16:17
各位大佬,我想问几个问题:

1、按上面的用法,用大数据平台分析数据,实际上就是一堆的联表查询吗?这 ...

1、按上面的用法,用大数据平台分析数据,实际上就是一堆的联表查询吗?这个性能会不会有问题?如果要实时去表里边查询数据,都是实时执行联表的HQL语句?
基本上都会用到联表查询,性能可以优化,不能因为性能而去掉联表,如果数据都放到一个表里,那问题才是最大的。有性能问题多优化。
实时框架不会用hive的,可以使用kafka sql或则是spark等,hive一般为离线数据

2、如果要做很多不同类型的数据分析,要建立一些结果表来存放HQL的执行结果不?
对滴,需要存储,但是存到哪里是框架问题,比如mysql,文件等。一般不会存到hive里面。

3、Mysql有多少个表,Hive也要建立对应的表么?
具体情况具体分析如上面。

回复

使用道具 举报

kennys 发表于 2018-9-26 14:07:17
实际的平台至少需要

多维大数据查询分析服务

基于Python的机器学习算法库集成服务

机器学习算法设计及性能优化

机器学习算法参数自动优化

大数据系统安全与认证
回复

使用道具 举报

gyhuminyan 发表于 2018-9-29 11:53:25
楼主讲了一般的大数据分析方法,其实,分析方法不是主角,关键是怎么理解了上面的这些业务逻辑,这才是最重要的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条