基于阿里云数加构建企业级数据分析平台(实验篇)

实验描述

实验概述

本实验主要聚焦于如何使用大数据计算服务MaxCompute构建企业级数据分析平台,如何对业务数据进行分析并将分析的结果用丰富的图表展示出来。

实验基本要求

学习者应该能够掌握以下知识点:

  • 了解数据分析的步骤和目的
  • 熟悉数据分析平台搭建的组成部分
  • 掌握阿里云数加不同产品及其使用场景
  • 灵活使用数加的不同产品搭建数据分析平台

第1章:实验背景

背景介绍

ABC是一家销售公司,其客户可以通过电话、邮件或者网站下单订购该公司经营范围内的商品,并使用信用卡、银行卡、转账等方式付费。付费成功后,ABC公司会根据客户地址依据就近原则选择自己的货仓,指派合适的快递人员配送商品。
之前该公司规模较小,采取了传统公司的粗放式经营模式。随着业务的发展以及竞争的日益加剧,该公司意识到需要通过数据分析的方式提高竞争力。
您是ABC公司招聘来的第一个数据分析师,他们给你的title是CDO(首席数据官),上任后的要做的第一件事儿是帮助公司搭建一个数据分析系统,帮公司监控当前业务运转情况,让CEO能够轻松掌握公司的健康程度。CEO通过邮件表明了他最近关心的一些信息:

  • 成交量和金额,以及最近的趋势是好是坏
  • 客户的变化情况
  • 库存,既不能断货,也不能滞压太多
  • 物流的效率
    第二天,负责公司业务系统建设和运维的PM向你介绍了一下公司现在的业务系统状况,核心业务都运行在一个MySQL版的RDS上,丢给你了一张原有的系统ER图,并建议你不要自建系统,而直接使用阿里云的大数据平台(数加)去搭建数据分析平台。

思路与流程

你梳理了一下CEO的需求,快速规划了一个最终展现给他的草图,根据多年的经验,觉得这一张图基本上能回答了CEO的主要问题:



接下来需要做的是倒推要完成这些指标的展现,需要用到哪些业务系统的数据,通过PM提供的ER图,并实际去访问了一下业务系统的数据,你终于圈定了数据源:

  • 订单表orders (成交量、成交金额)
  • 客户表customers (保有量、新增量)
  • 库存表stock、产品表dim_product (库存量、滞压资金)
  • 派单表dispatch、配送表dilivery(派件数、送达及时率)
    接着需要确定这些数据的获取方式(全量还是增量)、处理的时间粒度(多久处理一次)等,其中订单表、派单表、配送表均为增量获取,客户表、库存表、产品表均为全量获取

    非常明显,要做的任务分为二部分:
    第一步,数据处理
    首先进行数据同步,即将所需数据,从业务系统中同步到分析系统中(即标注为ODS的部分),接着进行数据加工:即将明细数据进行清洗、汇总,生成dw或者st数据。这两部分通常会被合称为数据ETL(Extract-Transform-Load)
    第二步,数据展现
    即把汇总数据通过图表等方式展现给CEO去看要做的内容很明确了,工欲善其事必先利其器,花了一点时间了解数加平台的产品和功能,很快为上述流程确定了产品的选型:

    首先,需要开通阿里云官网账号,然后,就可以把上述要做的内容完成就万事大吉了。
    现在,所有要做的事儿都已经搞清楚了。在还没有其他数据分析师的情况下,只能靠CDO自己动手啦!

第2章:实验环境

资源环境

请点击页面左侧的 实验资源 ,在左侧栏中,查看本次实验资源信息。


在弹出的左侧栏中,点击 创建资源 按钮,开始创建实验资源。
资源创建过程需要1-3分钟。完成实验资源的创建后,用户可以通过 实验资源 查看实验中所需的资源信息,例如:阿里云账号等。

准备源数据

注意:实验首选chrome浏览器,其他浏览器在使用过程中可能会因为版本的原因有兼容性的问题
本部分用户需要通过配置一个云数据库(RDS for MySQL),创建一个数据库abc_quickbi,然后使用该库模拟业务系统,即将附件中提供的6张表上传到该库中去。
具体步骤如下:

  1. 在云中沙箱的实验目录中,点击 实验资源 小节,点击创建资源
    【注】一旦开始创建资源,该实验就开始计时,并在到达实验规定的时长时,将自动结束实验并清除资源


  2. 等待资源创建成功后,可在该页面看到类似于下图的信息,其中点击 前往控制台 按钮后将在一个新页面中连接到阿里云官网,登陆时需要的企业别名、子用户名称和密码需要在阿里云账号信息显示的内容中获取,实际动手的操作步骤会在此进行;另外,该数据库实例的地域为华东2(上海),这个信息实验中也会用到


  3. 点击前往控制台,在弹出的登陆页面中,依次填入对应的子用户名称 和 子用户密码,点击登录,进入阿里云官网的管理控制台


  4. 点击产品与服务,在下来菜单选中云计算基础服务,在下一集 数据库 菜单中点击云数据库RDS版,进入RDS管理控制台首页


  5. 点击云数据库RDS,进入实例管理界面后,根据之前资源信息,选择同样的地域(本例地域为华东2)。由于在同一地域会创建多个RDS实例供不同实验账号使用,请在 实例名称 右侧的文本框中输入实验资源中的 子用户名称,将会找到分配给该账号的RDS实例,然后点击其右侧的管理:


  6. 左侧导航栏中点击数据库管理,目前数据库列表为空,点击右侧的按钮创建数据库:


  7. 输入数据库(DB)名称为abc_quickbi,点击确定,开始创建数据库,期间可以通过点击右上方的刷新按钮查看实时状态:


  8. 点击左侧导航栏的账号管理,进入账号管理界面,点击创建账号


  9. 填写账号配置信息,包括数据库账号为abc_user,密码为Abc_user123,重复输入一次确认密码,同时将数据库abc_quickbi的读写权限授权给该用户,点击确定,开始创建用户(普通用户)


  10. 点击登录数据库,在DMS(数据库管理工具)页面填写相关登录信息后登陆数据库



    填写DMS页的登录信息,其数据库信息为:RDS实例链接地址:端口(RDS实例链接地址在实验资源中有显示,端口使用3306),数据库的用户名和密码是刚刚创建的数据库账号及其密码,如下图所示。点击登录,进入数据库的管理页面。
    【注】首次使用DMS需要 激活授权 后,然后在RDS中重新点击 登录数据库。


  11. 点击SQL操作,选中SQL窗口,打开SQL操作窗口


  12. 在附件下载中下载data.zip文件到本地并解压,将解压的文件crt_src_tables.sql中的内容复制到SQL窗口,点击执行(或者使用快捷键F8),完成表的创建



  13. 点击数据方案,选中导入,打开数据导入页面


  14. 在导入页中点击新增任务,点击选中文件,选中解压的文件orders_dyn.sql,点击开始加载数据



    导入完成后,点击关闭按钮,关闭弹窗


  15. 完成后回到SQL窗口,输入
select * from orders 

查看结果,查看的主要项为:该表中是否已有数据,在显示的前100条记录中,是否有空值(null)等


  1. 重复14和15两步,将剩余的5个文件逐个上传到该数据库中,包括:
    customers_dyn.sql :对应的查询结果命令是select * from customers
    dilivery_dyn.sql :对应的查询结果命令是select * from dilivery
    dim_product.sql :对应的查询结果命令是select * from dim_product
    dispatch_dyn.sql :对应的查询结果命令是select * from dispatch
    stock_dyn.sql:对应的查询结果命令是select * from stock
    【注】本实验中将会使用该数据库中的表作为报表分析的源数据,请务必完成此准备工作,方可进行后续步骤。

配置数据源

本小节主要内容:登陆DataWorks,开通DataWorks服务,并配置业务系统的数据源。

  1. 登陆后进入管理控制台,依次点击大数据(数加)-> DataWorks,进入 大数据开发套件 概览页。


  2. 在大数据开发套件的概览页,当前账号中已创建一个项目。通过如下步骤,配置业务系统的数据源。
    1) 在大数据开发套件的概览页,找到已创建的项目,点击 数据集成 。



    2)进入数据集成界面后,点击左侧列表中的数据源,进入数据源配置页面,右侧面板中显示的即为当前该项目中已有的数据源。
    【注意】odps_first为默认添加的数据源,它表示当前项目对应的MaxCompute的数据源,可简单的理解为当前项目对应的数据存储、计算服务。



    3)点击页面右上角 新增数据源 -> MySQL,配置一个RDS的数据源,配置信息为实验资源中显示的RDS实例。


    4)在弹出的对话框中,输入如下信息,并点击 测试连通性 ,成功后点击 确定 。
    数据源类型:阿里云数据库(RDS)
    数据源名称:rds_ebuzi_yq
    RDS实例ID:输入实验资源中已创建RDS实例的ID
    RDS实例购买者ID:输入实验资源中的企业别名
    数据库名称:abc_quickbi
    用户名:abc_user
    密码:Abc_user123


  3. 至此,准备工作完毕。

第3章:数据任务开发

建表

本章的主要内容:在分析系统中,建表,并配置、开发ETL的任务。本小节主要内容:在分析系统中,创建表。

  1. 在DataWorks主页面上方找到数据开发的模块,点击 数据开发 。



    2、点击【临时查询】里的新建节点,选择ODPS SQL


  2. 给SQL指定名字create_tables,类型请选定ODPS SQL。完成后,点击 提交


  3. 通过如下步骤,在脚本中,执行 create_tables.sql 。
    1)从附件下载中,下载文件 create_tables.sql,并拷贝文件中的sql语句到DataIDE的 creat_tables 脚本文件中。



    2)在 create_tables 文件上方菜单中,点击 保存 。完成后,点击 运行



    3)等待一段时间,完成表创建。
  4. 通过如下步骤,验证实验中使用的表是否全部创建完成。
    1)点击【临时查询】里的新建节点,选择ODPS SQL



    2)在test脚本文件中,执行如下命令,查看建表结果:

show tables;

用户可以在执行结果中,查看到7张数据表:customers;dilivery;dim_product;dispatch;orders;st_buzi_all;stock。


创建数据同步的任务

七张表数据产生的粒度和方式:



本小节主要内容:根据上表中提供的信息,创建数据同步任务。
1、在数据开发页面,选择业务流程,新建业务流程。


  1. 在弹出窗口中,填写配置信息:名称 为 sync_dim_product,完成后点击 新建 。


  2. 通过如下步骤,完成数据同步任务的配置:
    1)在数据集成,新建数据集成节点,选择数据同步,指定之前配置的RDS的数据源 rds_ebuzi_yq(mysql),选中表 dim_product ,可以通过点击 数据预览 ,查看样例数据。





    2)在数据去向页面,目标数据源指定为 odps_first ,表指定为 dim_product ,清理规则 必须 指定为 写入前清理已有数据insert overwrite 。



    3)在字段映射页面,配置字段映射关系。本例中由于源表和目标表的字段名称和顺序都一致,所以自动匹配的结果即为最终结果。直接点击 下一步 。

    4)在通道控制页面,主要是配置作业速率上限和出错记录上限。本例中保持缺省值即可。

    5)在保存预览页面,检查一下配置内容有无错误,有则改之,无则继续。点击 保存。

    6)设置调度配置,点击右侧栏的 调度配置 ,调度周期 设置为 天 ,具体时间 为 凌晨4点 。





    7)完成如上设置后,依次点击 保存 -> 提交 。完成提交后,点击右上角的 运维 ,运行该任务。
  3. 通过如下步骤,运行数据同步任务,并查看运行结果。
    1)在任务视图页面,找到要运行的任务sync_dim_product,点击右侧的 测试,去触发任务的测试运行。



    2)在弹出的提示对话框中,直接点击 确认 。



    3)运行几秒种后,刷新页面,将会看到任务已经执行成功。
  4. 通过如下步骤,检查数据同步结果。
    1)返回数据开发页面。



    2)双击并打开脚本文件 test。



    3)在右侧的脚本编辑页面,删除现有内容并输入如下命令,查看表 dim_product 的同步结果。
select * from dim_product

点击运行 。等待一段时间,可以在下方的 结果 中查看到表dim_product 同步结果。


  1. 通过如下步骤,同步数据orders表。
    1)点击左上角的数据开发。在菜单中,选择业务流程,新建业务流程 。

    2)在弹出窗口中,填写配置信息:名称为 Sync_orders,完成后点击 创建 。
    3)由于增量加载时orders表为分区表,在数据同步任务的来源界面中,需要设置如下配置信息和过滤条件:
    数据源:rds_ebuzi_yq(mysql)
    表:orders
    过滤条件:date_format(order_time,'%Y%m%d')= '{bdp.system.bizdate}' 完成后,点击 下一步 。 ![](https://upload-images.jianshu.io/upload_images/6548563-83ff3bb6f784229f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![](https://upload-images.jianshu.io/upload_images/6548563-b0f0071a58d1412f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 4)在选择目标页面中,配置如下信息: 数据源:odps_first(odps) 表:orders 分区键取值:ds= '{bdp.system.bizdate}'
    清理规则:使用 写入前保留已有数据 insert into
    完成后,点击 下一步 。

    5)字段映射、通道控制页面,均使用默认配置,并点击 下一步 。在预览保存页面,点击 保存。

    6)在调度配置栏中,修改 调度周期 为 天 ,具体时间为 04 时 05 分。

    7)完成如上配置后,依次点击顶部的 保存,提交 和 前往运维 。

    8)在弹出的运维中心页面,参考 步骤4 ,运行同步任务sync_orders。等待一段时间,页面显示运行成功。

    9)参考 步骤5 ,在test脚本文件中,运行如下命令,查看同步的表orders的运行结果。
set odps.sql.allow.fullscan=true;
Select * from orders;
  1. 参考 步骤6 ,新建数据同步任务Sync_customers和Sync_stock,并进行测试。
    1)配置 数据同步 任务 Sync_customers ,详细信息参考如下:
    源表:RDS中的customers
    过滤条件:date_format(gen_date,'%Y%m%d')= '${bdp.system.bizdate}'
    目标表:odps_first中的customers
    清理规则:使用 写入前保留已有数据 insert into
    调度周期:设置为天,具体时间为 04时10分




    2)完成如上配置并 保存 和 提交 后,点击 前往运维 执行同步任务,运行成功后如下图所示。



    3)在test脚本文件中,执行如下命令,并查看同步后的customers表中数据。
Select * from customers;

4)配置 数据同步 任务 Sync_stock ,详细信息参考如下:
源表:RDS中的stock
过滤条件:date_format(last_update_time,'%Y%m%d')<='${bdp.system.bizdate}'
目标表:odps_first中的stock
清理规则:写入前清理已有数据Insert Overwrite
字段映射:点击字段 last_update_time 左侧的节点连接到右侧字段 update_time 的节点。
调度周期为天,具体时间为 04时15分



5)完成如上配置并 保存 和 提交 后,点击 前往运维 执行同步任务。



6)在test脚本文件中,执行如下命令,并查看同步后的stock表中数据。
Select * from stock;

7)至此,完成了4个节点任务的配置开发和测试。

  1. 通过如下步骤,新建工作流任务 sync_log 。
    1)点击 新建 ,选择 新建任务 ,在新建任务窗口中,选择 工作流任务 ,名字为 sync_log。点击 创建 。



    2)在 sync_log 的任务开发的画布上,拖入 虚节点 ,名称为 start 。




    3)拖入两个 数据同步 任务,名称分别为 sync_dilivery 和sync_dispatch 。


    4)然后,使用鼠标左键,分别用连线连接 start 与 sync_dilivery ;start 与 sync_dispatch 。



    5)双击同步任务 sync_dilivery ,并进入sync_dilivery任务的配置页面,配置数据同步任务。
    【说明】同步任务的配置详细步骤,请参考步骤6中的2)到6)。
    源表:rds_ebuzi_yq中的dilivery
    过滤条件:date_format(update_time,'%Y%m%d')= '${bdp.system.bizdate}'

目标表:odps_first中的dilivery
分区键取值:ds= '{bdp.system.bizdate}' 清理规则:写入前保留已有数据Insert into 完成后,点击 保存 。 ![](https://upload-images.jianshu.io/upload_images/6548563-f5468ff13affa10e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 6)在双击同步任务 sync_dispatch ,并配置如下信息。 源表:rds_ebuzi_yq中的 dispatch 过滤条件:date_format(dispatch_time,'%Y%m%d')='{bdp.system.bizdate}'

目标表:odps_first中的 dispatch
分区键取值:ds= '${bdp.system.bizdate}'
清理规则:写入前保留已有数据Insert into
完成后,点击 保存 。



7)点击页面左上角的 返回 ,返回上一级 sync_log的 流程面板, 配置sync_log流程任务的的调度信息,具体时间为:04点20分 。




8)保存、提交后前往运维,测试任务。等待一段时间后,工作流任务 sync_log 完成。

9)至此,完成4个节点同步任务和1个任务流同步任务的所有操作。

创建数据汇总加工的任务

本小节主要内容:创建数据汇总的节点任务,将所有的数据汇总到一个表中,并通过补数据的方式,导入增量表的历史数据。

  1. 通过如下步骤,新建一个节点任务 gen_st_buzi_all 。
    1)点击 【数据开发】 ,选择 【业务流程】,【新建业务流程】 ,类型为【 ODPS_SQL 】,名称为 gen_st_buzi_all 。完成后,点击 创建 。




    2)编写具体的SQL,产生st_buzi_all中的数据。在右侧文本页面,输入 gen_st_buzi_all.sql (请从左侧的 附件下载 中获取)中的全部代码,



    3)点击调度配置,配置具体时间为 04时20分 。添加依赖任务:点击 上游任务 右侧的 搜索对话框,依次选择之前创建的五个任务:sync_stock;sycn_orders;sync_log;sync_dim_product;sync_customers

    4)因为脚本中用到了一个自定义时间变量yyyy_mm_dd,需要在参数配置中指定该变量的取值。点击 参数配置 ,给变量 yyyy_mm_dd 赋值为 ${yyyy-mm-dd} 。

    5)依次点击 保存、提交 和 前往运维, 在运行页面,右侧点击 测试 ,运行成功后如下图所示。



    6)在test脚本中,运行如下命令,查看汇总表 st_buzi_all 中的数据。
set odps.sql.allow.fullscan=true;
select * from st_buzi_all;

7)至此,所有的数据同步、汇总任务均已配置完成。正常情况下,每日4点到4点20分之间会调度一次我们配置好的数据同步和数据加工的任务,成功运行后,我们需要的数据就会正常产生。

  1. 通过如下步骤,使用补数据的功能,处理历史数据。
    1)点击 运维中心
    2)在运维中心的页面,点击最左侧的 周期任务
    3)点击任务 sync_stock
    4)在右侧任务视图面板中,选中 project_etl_start ,点击 右键 ,并选择 补数据 。



    5)在弹出的补数据节点页面中,点击全选,指定业务日期(指定最近一周的时间范围,并且截止时间是前一天的日期;例如本次操作的时间是2017-08-1,因此时间范围选择的是2017-07-24至2017-07-31),点击 确认。



    6)在补数据页面将会看到这正在执行的补数据任务。
    【注】由于需要补最近一周的数据,并调用所有的任务节点进行数据处理,时间一般需要10分钟左右,所以无需等待,可以先操作后续的步骤。

第4章:报表开发

配置报表开发的环境

1. 保留 **运维中心 **的页面窗口,以便于后续查看补数据任务的执行状态。在浏览器新的窗口中访问如下地址,进入QuickBI的管理控制台。如果QuickBI服务尚未购买,需要先点击 标准版******30天试用申请,然后再点击 进入******QuickBI标准版 进入QuickBI的管理控制台:

https://das.base.shuju.aliyun.com/console.htm?spm=5176.2020520001.1001.180.25uPK8

【注意】用户也可以返回阿里云管理控制台页面,点击顶部 产品与服务->大数据->Quick BI ,并在 QuickBI的管理控制台 开通并购买QuickBI服务。


  1. 增加数据源。依次点击 工作空间 - 数据源 ,进入数据管理页面


  2. 点击 新建 ,并选择导入的数据源为 来自DataIDE 。
    【注】如果系统中有其他的数据源和数据集,请先删除已存在的所有数据源和数据集,以免后续操作有冲突!


  3. 选中需要导入的数据源,点击 导入 。


  4. 在数据源的列表中点击刚导入的数据源,在右侧列表中选择需要的表(st_buzi_all),点击 创建数据集 。



    6.创建的数据集将会在 我的数据集 的列表中显示:


报表设计

整体运营情况的报表,基于数据表st_buzi_all设计和创建,希望的报表样子如下:


  1. 依次点击 仪表板 - 新建,创建数据展示的仪表板:


  2. 点击右上角的 切换数据集 ,选中 st_buzi_all 。


  3. 将默认图表删除。


  4. 单击 查询条件 ,添加一个查询条件到画布。


  5. 依次单击数据图表中的柱状图、柱状图、仪表盘、线图、四个指标看板,并使用鼠标调整图形,结果如下:


  6. 指定报表名称 业务大盘监控,然后,点击 保存 。


  7. 点击查询条件,配置数据信息,包括源数据集选择 st_buzi_all,字段选择 buzi_date(day),同源关联选择两个柱图和一个线图:


  8. 点击 查询条件 中具体内容(查询框),修改标签为 日期 ,同时选定日期区间 、相对时间。


  9. 点击柱图A,配置数据信息:维度 为 buzi_date(day),指标 为 order_cnt,颜色图例指定 ds 字段,点击 更新 。
    【说明】柱图A 位置请参考 步骤5 中的图片。


  10. 对柱图A,点击 样式 ,修改 标题 为 七日订单数趋势 ,并勾掉 轴标题 。


  11. 点击 柱图B ,配置数据信息,维度 为 buzi_date(day),指标 为 total_amt, 颜色图例设置为 ds,点击更新
    【说明】柱图B 位置请参考 步骤5 中的图片。


  12. 对柱图B,点击格式,修改标题为 七日成交金额趋势 ,并勾掉 轴标题 。


  13. 点击仪表盘,将数据集中的度量 curr_cust_cnt 拖到 指标角度/度量,将数据集中的维度 buzi_date(day) 拖入到 过滤器 中,点击红圈标示出来的过滤器配置的 漏斗图标,进行下一步的过滤器配置。
    【说明】仪表盘 位置请参考 步骤5 中的图片。


  14. 在设置过滤器页面,配置过滤条件。然后点击 更新。


  15. 设置仪表盘的样式。标题为客户保有量,勾掉 显示图例,点击 添加 按钮增加区间信息,区间起始值为 10 ,结束值为 1000 ,点击更新


  16. 点击线图,配置数据信息,维度为buzi_date(day),度量 为 new_cust_cnt
    【说明】线图 位置请参考 步骤5 中的图片。


  17. 配置样式。在样式面板中,标题设为:七日新增用户数趋势,勾掉 轴标题 ,勾选 面积、曲线


  18. 点击看板1,配置数据信息。度量 选 stock_item_cnt ,将维度 buzi_date(day) 拖入过滤器。
    【说明】看板1 位置请参考 步骤5 中的图片。


  19. 配置过滤器。选择日期、相对时间,相对时间设置 为 昨天 ,点击 确定 和 更新。


  20. 配置样式。标题设为:当前库存数,选择最后一个模板,每行显示 1 个,并选中隐藏维度。


  21. 对于看板2、看板3、看板4均进行类似的配置,配置信息分别为:

【说明】看板2、看板3、看板4 位置请参考 步骤5 中的图片。

看板2

度量:stock_amt
标题:当前库存金额
过滤字段:buzi_date(day)
过滤条件:昨天
模板:最后一个模板,每行个数1个,勾选隐藏维度
看板3

度量:sent_prd_cnt
标题:当日派送件数
过滤字段:buzi_date(day)
过滤条件:昨天
模板:最后一个模板,每行个数1个,勾选隐藏维度
看板4

度量:succ_sent_rate
标题:当日及时到达率
过滤字段:buzi_date(day)
过滤条件:昨天
模板:最后一个模板,每行个数1个,勾选隐藏维度

查看效果

  1. 配置完成后点击保存,然后点击预览,查看效果。



    查看结果如下:
    【注】如果显示的数据少于七天,请返回DataIDE的运维中心模块中去查看所有的补数据任务是否成功完成。



    至此,我们完成了报表分析所有的实验操作!
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容