电商项目之交易订单明细流水表 SQL 实现(上)|学习笔记

简介: 快速学习电商项目之交易订单明细流水表 SQL 实现(上)

开发者学堂课程【新电商大数据平台2020最新课程电商项目之交易订单明细流水表 SQL 实现(上)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/640/detail/10533


电商项目之交易订单明细流水表 SQL 实现(上)

 

因为我们在做的时候不光要会写 sql ,还要会分析,所以上节课我们做了一下右分析。这节课我们针对上一节课所做的右分析,进行一个 sql 实现。如此的话 ,会把图中的两列信息全部打开,到时候会一一对应的去查询数据。

打开笔记,创建对应的交易主题,里面是交易订单明细流水表。

image.png

完成后,我们该如何去实现呢?

首先,看一下我们的表数据。比如说,每个表里面都有对应的一个字段,在这里提示的一共有四个表,是我们需要获取的。那现在就按照我的一个 sql 来给大家写一下。

先把 hive 启动一下,打上 hive 。启动之后就和它没关系了。

image.png

首先,创建一个拟真表;在这里面写 sql 。

with tborder as (

select

)

因为我们要分几个批次去做,所以第一步,我们要先获取 order_id ,包括我们的 order 的用户、订单状态以及用户的信息。接着查询我们的订单表,把订单表的里面数据能获取到的全部获取到。

from 我们的订单表,复制粘贴,检查好不敢出错。

with tborder as (

select

from ods_nshop.ods_02_orders

)

image.png

订单信息填入好后,我们要输入条件,考虑这个表是不是要全部导入订单表的信息。它没有按照我们的时间划分进行分居,所以我们在获取订单数据的时候需要判断当前这条记录是否是当天的数据,因为是全部导入,它可能会存在历史记录。

假如此时想分析2020年3月30日的一个数据结果或者是订单状态,这个时候我们需要看一下 order_ctime 创建时间是什么时候?

假如说创建时间是今天(2020年3月30日),不管是十点还是十一点,就都是我的订单。如果说是昨天、前天、大前天或者前七天的,就不是我的订单。

所以说,第一步我们首先要判断条件,即今天的订单信息必须是我的数据,就需要查询 order ctime ,输入 hive> select * from ods_nshop.ods_02_orders limit 10;可以看到是跳转页面后的倒数第三个。

image.png

image.png

这里需要用实际转换给它转换一下,我们是只需要年月日的, bigint 的后面有个逗号,后面等于这个订单创建的时间,这个时间我们需要在转一下,可以看到日期是11.02。就等于20191102,不然会没有数据。

 image.png

 image.png

with tborder as (

select

from ods_nshop.ods_02_orders

where

from_unixtime(cast(order_ctime/1000 as bigint),‘yyyyMMdd’)=‘20191102’

)

把条件先摆在这里,接下来要获取 order_id 。可以看到订单表里 order_id 、 customer_id 都有,就是说我们可以获取用户的订单 ID 和用户的订单表,也就是说可以获取 customer_id 用户订单 ID 、订单状态等。

看交易订单明细流水表中,是需要用户 ID 和订单 ID ,当中的用户 ID 就是订单表中的 customer_id 用户订单 ID ,也能获取到订单状态。

这里先获取 order_id 、 customer_id 还有状态、收货人地址、支付类型。然后,输入 consignee_zipcode 、 pay_type 。 order_ctime 也能获取,把它拿过来是因为我们后面会用到,使用 order_ctime 和其他的表里的数据进行对比,比如说,订单详情表、交易记录详情表、支付记录详情表等等。

with tborder as (

select

order_id,

customer_id,

order_status,

consignee_zipcode,

pay_type,

order_ctime,

from ods_nshop.ods_02_orders

where

from_unixtime(cast(order_ctime/1000 as bigint),‘yyyyMMdd’)=‘20191102’

)

之后我们获取当前时间。因为它里面没有分居时间,所以先不获取。上述内容就是我们能获取到的已知数据。

在最下面的括号后打上逗号,再写一个流水表。 from?接下来要找到订单详情表、商品记录表,由商品信息表取到售卖地即可。此时需要用到订单的详情表,因为要用订单详情表里面的信息和商品信息表里面对应的去照应、取值。

取值大家要注意,需要用到 product_id 和 product_code 进行照应,因为 product_id 要在订单商品 ID 和商品信息的商品 ID 进行照应。

image.png

在 join 完成之后,需要注意的是:我们要取到商品信息表里的商品供应商编码和商品的销售价格,因为在交易订单明细流水表中需要用到。在交易订单明细流水表中有一个店铺 ID ,供应商是属于店铺的,所以会用到供应商编码。

 

商品的销售价格也需要用到,因为后面需要进行计算,我们先取到这两个信息。剩余其他的在订单详情表里都可以取到相关的信息,比如说:

订单 ID 、商品 ID 、购买商品数量、购买商品单价、商品加权价格、优惠金额。对于商品单价,要以商品信息表里的商品单价为准。

不能在订单表中获取上述信息,因为订单表只是下单状态,是否参与优惠、有无优惠的活动都只能通过订单详情表来判断。

订单表只是先获取用户的购买订单信息,只有订单详情表才会记录真实的订单记录信息。

检验我们的信息是否在一个库当中?输入 show databases 检验。

image.png

我们可以看到都是 ods 没有dim 。

image.png

这里接着写下一个 sql 。给 ods_nshop.ods_02_order_detail 命名叫 a 。打开商品信息表,给 ods_nshop.dim_pub_product 命名叫 b 。

后面on a.product_id ,在订单详情表中可以看到订单商品 id ,和商品信息表中的商品 id 进行照应,

image.png

image.png

这两个表都不是分居表,所以有一个 where 条件,有一个时间,这里我们用上一个表的就可以,将里面的进行修改,修改为订单详情表里的下单时间。完成之后进行取值,取能获取的已知信息,比如: order_id 。因为我们所做的这几个表都需要照应,所以要有照应条件。

cnt 是订单详情表中的商品购买数量,因为最终的交易订单明细流水表中需要得到购买商品数量,这里需要注意。还取了商品加权价格、优惠金额、是否参加活动,到后面需要判断参加优惠的活动。之后取 b , b 取供应商的 id ,即商品的供应商编码,还取商品的销售价格。时间不取,就完成了。

tbdetail_as(

select

a.order_id,

a.product_id,

a.product_cnt,

a.weighing_cost,

a.district_money,

a.is_activity,

b.supplier_code,

b.product_price,

from ods_nshop.ods_02_order_detail a

join ods_nshop.dim_pub_product b

on a.product_id =b.product_code

where

from_unixtime(cast(a.order_ctime/1000 as bigint),‘yyyyMMdd’)=‘20191102’

)

相关文章
|
5月前
|
SQL 关系型数据库 MySQL
mysql sql语句删除一个库下的所有表
mysql sql语句删除一个库下的所有表
40 1
|
4月前
|
SQL 监控 关系型数据库
PolarDB产品使用问题之SQL防火墙怎么拦截没有指定WHERE条件的特定表的SQL语
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
SQL 分布式计算 DataWorks
MaxCompute操作报错合集之使用sql查询一个表的分区数据时遇到报错,该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
5月前
|
SQL 存储 测试技术
|
4月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
5月前
|
SQL 存储 数据库
SQL 撤销索引、撤销表以及撤销数据库
SQL 撤销索引、撤销表以及撤销数据库
65 4
|
5月前
|
SQL 存储 关系型数据库
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
47 1
|
5月前
|
SQL 存储 缓存
揭秘SQL中的公用表表达式:数据查询的新宠儿
揭秘SQL中的公用表表达式:数据查询的新宠儿
62 2
|
6月前
|
SQL 关系型数据库 MySQL
sql怎么创建数据库表,SQL(Struct
SQL是管理关系型数据库的标准语言,用于创建、维护和查询数据库表。创建表的基本步骤包括:选择数据库(如MySQL等),使用CREATE TABLE语句定义表结构,指定字段属性和数据类型,设置约束(如主键、唯一键),创建索引以提升查询性能,最后以分号结束语句完成创建。此外,还可使用ALTER TABLE修改表,DROP TABLE删除表,以及其他SQL语句进行查询、插入、更新和删除操作,有效管理数据库。
69 3
|
5月前
|
SQL 关系型数据库 MySQL
sql删除数据库中表
在SQL中,如果你想删除(或称为\以下是基本语法: ```sql DROP TABLE 表名称; ``` 例如,如果你有一个名为 `employees` 的表,并且你想删除它,你可以执