讀數(shù)據(jù)質(zhì)量管理:數(shù)據(jù)可靠性與數(shù)據(jù)質(zhì)量問(wèn)題解決之道06數(shù)據(jù)測(cè)試

讀數(shù)據(jù)質(zhì)量管理:數(shù)據(jù)可靠性與數(shù)據(jù)質(zhì)量問(wèn)題解決之道06數(shù)據(jù)測(cè)試.png

1. 運(yùn)行分析型數(shù)據(jù)轉(zhuǎn)換

1.1. 確保ETL期間的數(shù)據(jù)質(zhì)量

  • 1.1.1. ETL即“提取-轉(zhuǎn)換-加載”

  • 1.1.2. 步驟

    • 1.1.2.1. 在提取步驟中,原始數(shù)據(jù)從一些上游數(shù)據(jù)源中導(dǎo)出沫勿,并將其移動(dòng)到暫存區(qū)

      1.1.2.1.1. MySQL

      1.1.2.1.2. NoSQL服務(wù)器

      1.1.2.1.3. CRM系統(tǒng)

      1.1.2.1.4. 數(shù)據(jù)湖中的原始文件

    • 1.1.2.2. 暫存區(qū)中的數(shù)據(jù)按照數(shù)據(jù)工程師的要求規(guī)范進(jìn)行組合和處理

    • 1.1.2.3. 在加載步驟中,我們將轉(zhuǎn)換后的數(shù)據(jù)移出暫存區(qū)并移至其目的地,該目的地通常是數(shù)據(jù)倉(cāng)庫(kù)中的一個(gè)特定表

1.2. 確保轉(zhuǎn)換期間的數(shù)據(jù)質(zhì)量

  • 1.2.1. ETL是指先將數(shù)據(jù)加載到暫存服務(wù)器,然后再加載到目標(biāo)系統(tǒng)的過(guò)程

    • 1.2.1.1. ETL為數(shù)據(jù)工程師提供了在數(shù)據(jù)投入生產(chǎn)前對(duì)其進(jìn)行驗(yàn)證的機(jī)會(huì)
  • 1.2.2. ELT要求將數(shù)據(jù)直接加載到目標(biāo)系統(tǒng)中

    • 1.2.2.1. ELT則加快了處理速度草雕,但如果沒(méi)有恰當(dāng)?shù)剡M(jìn)行測(cè)試和監(jiān)控,就會(huì)降低數(shù)據(jù)質(zhì)量
  • 1.2.3. 轉(zhuǎn)換源數(shù)據(jù)的原因

    • 1.2.3.1. 只是對(duì)字段進(jìn)行重命名固以,以匹配目標(biāo)位置的模式需求

    • 1.2.3.2. 通過(guò)篩選墩虹、聚合、匯總憨琳、去重等方式對(duì)源數(shù)據(jù)進(jìn)行清洗和整合

    • 1.2.3.3. 同時(shí)進(jìn)行類型轉(zhuǎn)換和單位轉(zhuǎn)換

    • 1.2.3.4. 為了滿足行業(yè)規(guī)定或法規(guī)诫钓,你可以在此步驟對(duì)敏感數(shù)據(jù)字段進(jìn)行加密

    • 1.2.3.5. 進(jìn)行數(shù)據(jù)治理審計(jì)或數(shù)據(jù)質(zhì)量檢查

2. 警報(bào)和測(cè)試

2.1. dbt(數(shù)據(jù)構(gòu)建工具)、WhereScape或Informatica等ETL系統(tǒng)也容易出現(xiàn)故障

  • 2.1.1. 需要一個(gè)強(qiáng)大的測(cè)試和警報(bào)系統(tǒng)以便在大批量數(shù)據(jù)生產(chǎn)環(huán)境中運(yùn)行這些程序

2.2. 數(shù)據(jù)測(cè)試是在生產(chǎn)之前或期間驗(yàn)證組織對(duì)數(shù)據(jù)假設(shè)的過(guò)程

  • 2.2.1. 空值

    • 2.2.1.1. 是否有任何值是未知的(為空值)篙螟?
  • 2.2.2. 容量

    • 2.2.2.1. 有沒(méi)有收到任何的數(shù)據(jù)菌湃?

    • 2.2.2.2. 收到的數(shù)據(jù)是太多了還是太少了?

  • 2.2.3. 分布

    • 2.2.3.1. 數(shù)據(jù)是否在可接受的范圍內(nèi)闲擦?

    • 2.2.3.2. 值是否在給定列的范圍內(nèi)慢味?

  • 2.2.4. 獨(dú)特性

    • 2.2.4.1. 獨(dú)特性
  • 2.2.5. 已知的不變量

    • 2.2.5.1. 兩個(gè)對(duì)象是否從根本上不同

2.3. 數(shù)據(jù)測(cè)試的兩個(gè)最佳工具分別是dbt測(cè)試和Great Expectation

  • 2.3.1. Great Expectations更為通用

  • 2.3.2. dbt本身并不是一個(gè)測(cè)試解決方案

    • 2.3.2.1. 如果你已經(jīng)在使用該框架對(duì)數(shù)據(jù)進(jìn)行建模和轉(zhuǎn)換了,那么其開(kāi)箱即用的測(cè)試效果非常好

2.4. 要運(yùn)行數(shù)據(jù)質(zhì)量測(cè)試

  • 2.4.1. 將轉(zhuǎn)換后的數(shù)據(jù)加載到臨時(shí)的暫存表/數(shù)據(jù)集中

  • 2.4.2. 運(yùn)行測(cè)試以確保暫存表中的數(shù)據(jù)落在生產(chǎn)所需的閾值范圍內(nèi)

2.5. 如果數(shù)據(jù)質(zhì)量測(cè)試失敗了墅冷,則會(huì)向負(fù)責(zé)該數(shù)據(jù)資產(chǎn)的數(shù)據(jù)工程師或分析師發(fā)送警報(bào)纯路,而數(shù)據(jù)管道也不會(huì)運(yùn)行

  • 2.5.1. 數(shù)據(jù)工程師能夠在影響最終用戶或系統(tǒng)之前發(fā)現(xiàn)意料之外的數(shù)據(jù)質(zhì)量問(wèn)題

  • 2.5.2. 數(shù)據(jù)測(cè)試可以在轉(zhuǎn)換過(guò)程的任何步驟之前或之后進(jìn)行

  • 2.5.3. 測(cè)試是數(shù)據(jù)質(zhì)量工作流中的一個(gè)重要組成部分,但它并不是團(tuán)隊(duì)在解決數(shù)據(jù)質(zhì)量問(wèn)題時(shí)應(yīng)該采取的唯一主動(dòng)措施

2.6. dbt單元測(cè)試

  • 2.6.1. 現(xiàn)代ELT最受歡迎的選擇之一

  • 2.6.2. 工具擴(kuò)展了向被轉(zhuǎn)換的表添加單元測(cè)試的能力

  • 2.6.3. dbt模型是獨(dú)立的SQL語(yǔ)句寞忿,它們接收輸入數(shù)據(jù)驰唬,對(duì)其進(jìn)行轉(zhuǎn)換,并將轉(zhuǎn)換的一些結(jié)果加載到目標(biāo)表中

  • 2.6.4. 單項(xiàng)測(cè)試

    • 2.6.4.1. 可以在不同模型上重復(fù)使用的“模板化”測(cè)試

    • 2.6.4.2. 采用參數(shù)化的SQL查詢形式腔彰,因此可以接收參數(shù)

    • 2.6.4.3. unique測(cè)試的是在特定列中的值是不是唯一的

    • 2.6.4.4. not_null測(cè)試的是特定列中的值是否為空值

    • 2.6.4.5. accepted_values確保一列中的所有值都是有限集中的一個(gè)

    • 2.6.4.6. relationships檢查了表之間的“引用完整性”

      2.6.4.6.1. 確保如id在內(nèi)的關(guān)鍵字段是一一對(duì)應(yīng)的

  • 2.6.5. dbt測(cè)試通常是很好的測(cè)試標(biāo)準(zhǔn)

  • 2.6.6. dbt測(cè)試是由你組織中的開(kāi)發(fā)人員以代碼形式手動(dòng)維護(hù)的

    • 2.6.6.1. 復(fù)雜的測(cè)試可以確保獲得高質(zhì)量的數(shù)據(jù)

    • 2.6.6.2. 會(huì)浪費(fèi)工程資源的時(shí)間消耗叫编,所花費(fèi)的時(shí)間也接近于開(kāi)發(fā)模型本身所需的時(shí)間

  • 2.6.7. 測(cè)試失敗必須有意義才能有效

  • 2.6.8. 測(cè)試失敗仍然是表明出現(xiàn)錯(cuò)誤的良好信號(hào),盡管它并不能提供快速修復(fù)

    • 2.6.8.1. 需要深入研究棧來(lái)消除錯(cuò)誤霹抛,因?yàn)槟愕腅LT測(cè)試方案不是正確的端到端測(cè)試

2.7. Great Expectations單元測(cè)試

  • 2.7.1. 一個(gè)開(kāi)源工具搓逾,它以單元測(cè)試的形式提供了另一種從數(shù)據(jù)中“斷言你所期望”的方法

  • 2.7.2. 比dbt測(cè)試更具可擴(kuò)展性

    • 2.7.2.1. 用Python編寫(xiě)的,它可以被用于各種ETL/ELT解決方案
  • 2.7.3. 允許單元測(cè)試在一系列不同的數(shù)據(jù)量上運(yùn)行杯拐,從單個(gè)小批量數(shù)據(jù)到完整的數(shù)據(jù)轉(zhuǎn)換

  • 2.7.4. 作為Python包發(fā)布霞篡,擴(kuò)展了有用的命令行界面世蔗,并使用Jupyter等工具進(jìn)行數(shù)據(jù)驗(yàn)證

  • 2.7.5. Slack集成

    • 2.7.5.1. 設(shè)置高度可配置的Slack警報(bào)
  • 2.7.6. 僅限于Python

    • 2.7.6.1. 是一個(gè)Python工具
  • 2.7.7. 一個(gè)完全獨(dú)立的工具,具有不同的學(xué)習(xí)曲線

2.8. Deequ單元測(cè)試

  • 2.8.1. 一個(gè)由AWS構(gòu)建的開(kāi)源庫(kù)朗兵,用于運(yùn)行數(shù)據(jù)單元測(cè)試

  • 2.8.2. 構(gòu)建在Apache Spark上污淋,因此在格式方面具有很大的靈活性

  • 2.8.3. Deequ的工作方式是斷言測(cè)試條件并返回失敗的數(shù)據(jù)行或批數(shù)據(jù)

  • 2.8.4. Deequ測(cè)試套件的入口點(diǎn)是VerificationSuite類

  • 2.8.5. 優(yōu)點(diǎn)

    • 2.8.5.1. 與AWS集成

      2.8.5.1.1. 很容易與AWS Glue進(jìn)行集成,并且在技術(shù)博客中進(jìn)行了詳細(xì)的在線記錄

    • 2.8.5.2. 高可擴(kuò)展性

      2.8.5.2.1. 可以利用Scala作業(yè)編排和并行的優(yōu)勢(shì)余掖,使其更加高效

      2.8.5.2.2. 數(shù)據(jù)存儲(chǔ)在Scala的數(shù)據(jù)框架中寸爆,這是針對(duì)大數(shù)據(jù)生態(tài)系統(tǒng)及其挑戰(zhàn)而專門(mén)構(gòu)建的

    • 2.8.5.3. 有狀態(tài)計(jì)算

      2.8.5.3.1. 可以計(jì)算指標(biāo)的元數(shù)據(jù),將所述元數(shù)據(jù)存儲(chǔ)在適當(dāng)?shù)奈恢醚纹郏缓笤诮邮崭鄶?shù)據(jù)時(shí)重新計(jì)算關(guān)鍵指標(biāo)

    • 2.8.5.4. 內(nèi)置的異常檢測(cè)

      2.8.5.4.1. 允許對(duì)運(yùn)行指標(biāo)的平均值和偏差進(jìn)行檢測(cè)

  • 2.8.6. 缺點(diǎn)

    • 2.8.6.1. 對(duì)于數(shù)據(jù)工程領(lǐng)域以外的人來(lái)說(shuō)赁豆,Scala并不是一種友好的語(yǔ)言

    • 2.8.6.2. 對(duì)集成測(cè)試的適用性有限

      2.8.6.2.1. 與dbt測(cè)試按模型運(yùn)行并自然地跨ELT管道集成了測(cè)試斷言所不同,Deequ可以靈活地運(yùn)行在你所提供的任何一批數(shù)據(jù)上

    • 2.8.6.3. 缺乏直觀的用戶界面

      2.8.6.3.1. 軟件非常簡(jiǎn)單且功能十分強(qiáng)大

2.9. Deequ單元測(cè)試

  • 2.9.1. 一個(gè)由AWS構(gòu)建的開(kāi)源庫(kù)冗美,用于運(yùn)行數(shù)據(jù)單元測(cè)試

  • 2.9.2. 構(gòu)建在Apache Spark上歌憨,因此在格式方面具有很大的靈活性

  • 2.9.3. Deequ的工作方式是斷言測(cè)試條件并返回失敗的數(shù)據(jù)行或批數(shù)據(jù)

  • 2.9.4. Deequ測(cè)試套件的入口點(diǎn)是VerificationSuite類

  • 2.9.5. 優(yōu)點(diǎn)

    • 2.9.5.1. 與AWS集成

      2.9.5.1.1. 很容易與AWS Glue進(jìn)行集成,并且在技術(shù)博客中進(jìn)行了詳細(xì)的在線記錄

    • 2.9.5.2. 高可擴(kuò)展性

      2.9.5.2.1. 可以利用Scala作業(yè)編排和并行的優(yōu)勢(shì)墩衙,使其更加高效

      2.9.5.2.2. 數(shù)據(jù)存儲(chǔ)在Scala的數(shù)據(jù)框架中务嫡,這是針對(duì)大數(shù)據(jù)生態(tài)系統(tǒng)及其挑戰(zhàn)而專門(mén)構(gòu)建的

    • 2.9.5.3. 有狀態(tài)計(jì)算

      2.9.5.3.1. 可以計(jì)算指標(biāo)的元數(shù)據(jù),將所述元數(shù)據(jù)存儲(chǔ)在適當(dāng)?shù)奈恢闷岣模缓笤诮邮崭鄶?shù)據(jù)時(shí)重新計(jì)算關(guān)鍵指標(biāo)

    • 2.9.5.4. 內(nèi)置的異常檢測(cè)

      2.9.5.4.1. 允許對(duì)運(yùn)行指標(biāo)的平均值和偏差進(jìn)行檢測(cè)

  • 2.9.6. 缺點(diǎn)

    • 2.9.6.1. 對(duì)于數(shù)據(jù)工程領(lǐng)域以外的人來(lái)說(shuō)心铃,Scala并不是一種友好的語(yǔ)言

    • 2.9.6.2. 對(duì)集成測(cè)試的適用性有限

      2.9.6.2.1. 與dbt測(cè)試按模型運(yùn)行并自然地跨ELT管道集成了測(cè)試斷言所不同,Deequ可以靈活地運(yùn)行在你所提供的任何一批數(shù)據(jù)上

    • 2.9.6.3. 缺乏直觀的用戶界面

      2.9.6.3.1. 軟件非常簡(jiǎn)單且功能十分強(qiáng)大

3. Apache Airflow

3.1. Apache Airflow挫剑、Luigi去扣、Matillion和Stitch等工具讓團(tuán)隊(duì)能夠更好地管理編排層的數(shù)據(jù)質(zhì)量,該層以編程方式編寫(xiě)樊破、調(diào)度和監(jiān)控?cái)?shù)據(jù)管道中的工作流

3.2. “檢查點(diǎn)”

  • 3.2.1. 通常被稱為有向無(wú)環(huán)圖(Directed Acylic Graph愉棱,DAG)

3.3. Apache Airflow(和其他編排工具)有向無(wú)環(huán)圖最常見(jiàn)的數(shù)據(jù)宕機(jī)類型是質(zhì)量變低的查詢和錯(cuò)誤的Python代碼

3.4. 滿是錯(cuò)誤的代碼可能是人為錯(cuò)誤(例如令人討厭的縮進(jìn)錯(cuò)誤)引起的,而當(dāng)Apache Airflow作業(yè)運(yùn)行所花費(fèi)的時(shí)間比預(yù)期更長(zhǎng)時(shí)哲戚,查詢的質(zhì)量會(huì)降低

3.5. 調(diào)度程序的SLA

  • 3.5.1. 在編排層防止數(shù)據(jù)事故的另一種流行方法是將“斷路器”方法用于數(shù)據(jù)管道的運(yùn)行

  • 3.5.2. 斷路意味著當(dāng)數(shù)據(jù)不符合一組質(zhì)量閾值時(shí)奔滑,數(shù)據(jù)管道將停止運(yùn)行

  • 3.5.3. 斷路器是CI/CD工作流程中的常見(jiàn)做法,也是一種防止系統(tǒng)因新軟件部署而發(fā)生中斷的手段顺少,許多相同的概念都可以應(yīng)用于數(shù)據(jù)管道

  • 3.5.4. 團(tuán)隊(duì)可以在測(cè)試和CI/CD流程中的其他步驟(如版本控制)之上集成斷路器

  • 3.5.5. 可以在指標(biāo)更新完成后實(shí)施一個(gè)有用的斷路器朋其,在允許任何下游作業(yè)執(zhí)行前先運(yùn)行完整性測(cè)試

  • 3.5.6. 如果發(fā)現(xiàn)輸送到管道中的上游數(shù)據(jù)不準(zhǔn)確,則暫停管道中間的數(shù)據(jù)工作流

  • 3.5.7. 斷路器可以防止數(shù)據(jù)產(chǎn)品將高質(zhì)量和低質(zhì)量的數(shù)據(jù)混合脆炎,從而確泵吩常可用數(shù)據(jù)的可靠性

    • 3.5.7.1. 線路閉合:數(shù)據(jù)正在流經(jīng)管道

    • 3.5.7.2. 線路開(kāi)啟:數(shù)據(jù)沒(méi)有流經(jīng)管道

  • 3.5.8. 核心解決方案

    • 3.5.8.1. 數(shù)據(jù)沿襲

    • 3.5.8.2. 跨管道的數(shù)據(jù)分析

    • 3.5.8.3. 能夠通過(guò)分析發(fā)現(xiàn)的問(wèn)題來(lái)自動(dòng)觸發(fā)線路

  • 3.5.9. 斷路器被用于防止豎井式數(shù)據(jù)管道的新鮮度、容量和分布問(wèn)題秒裕,但類似的原理也可以應(yīng)用于大規(guī)模自動(dòng)化

3.6. 為Apache Airflow DAG安裝斷路器是防止數(shù)據(jù)質(zhì)量問(wèn)題的一種更為積極主動(dòng)的方法袱蚓,如果數(shù)據(jù)不滿足新鮮度、容量和模式閾值的要求几蜻,則可以在編排層停止數(shù)據(jù)管道

3.7. 斷路是一種有價(jià)值且節(jié)省成本的工具喇潘,但它通常僅用于最關(guān)鍵的數(shù)據(jù)宕機(jī)事件

  • 3.7.1. 斷路不僅可以防止不良數(shù)據(jù)破壞原本完美的管道爽撒,而且還可以確保在運(yùn)行具有(難以發(fā)現(xiàn)的)數(shù)據(jù)質(zhì)量問(wèn)題的DAG時(shí)不會(huì)產(chǎn)生回填成本

3.8. SQL檢查運(yùn)算符

  • 3.8.1. 可驗(yàn)證給定DAG的內(nèi)容是否與多個(gè)關(guān)鍵元素(包括值、間隔和閾值)的預(yù)期相一致

  • 3.8.2. 將允許你運(yùn)行自定義的SQL檢查運(yùn)算符响蓉,這些運(yùn)算符從給定的SQL查詢中返回單行,以檢查該行中的任何返回值是否為False

3.9. 如果沒(méi)有戰(zhàn)略化地審慎實(shí)施哨毁,斷路器和SQL檢查運(yùn)算符可能會(huì)阻止整個(gè)數(shù)據(jù)管道運(yùn)行那些與問(wèn)題無(wú)關(guān)且高質(zhì)量的作業(yè)枫甲,從而阻止分析型數(shù)據(jù)流向下游系統(tǒng)

4. 要點(diǎn)

4.1. 解決數(shù)據(jù)宕機(jī)不只是在下游儀表板中出現(xiàn)空值時(shí)對(duì)相關(guān)方做出回應(yīng),或者當(dāng)你在收到CEO發(fā)來(lái)關(guān)于“丟失數(shù)據(jù)”的瘋狂電子郵件時(shí)重新訪問(wèn)你的Snowflake查詢

4.2. 數(shù)據(jù)宕機(jī)應(yīng)該能夠通過(guò)在數(shù)據(jù)管道的各個(gè)階段集成數(shù)據(jù)質(zhì)量檢查來(lái)進(jìn)行主動(dòng)預(yù)防

  • 4.2.1. 從最初的數(shù)據(jù)倉(cāng)庫(kù)或數(shù)據(jù)湖中接收數(shù)據(jù)扼褪,到最終在商業(yè)智能層中的實(shí)際應(yīng)用

4.3. 雖然數(shù)據(jù)質(zhì)量問(wèn)題不能單靠技術(shù)來(lái)解決想幻,但收集、清洗话浇、接收脏毯、處理和編排數(shù)據(jù)時(shí)考慮數(shù)據(jù)可靠性一定會(huì)對(duì)數(shù)據(jù)質(zhì)量的提高有所幫助

4.4. 即使有最嚴(yán)格的SQL檢查,那些“未知的未知”也可能會(huì)被遺漏

4.5. 數(shù)據(jù)永遠(yuǎn)不會(huì)完全可靠幔崖,而我們最好可以盡早接受這一事實(shí)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末食店,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赏寇,更是在濱河造成了極大的恐慌吉嫩,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗅定,死亡現(xiàn)場(chǎng)離奇詭異自娩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)渠退,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)忙迁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人碎乃,你說(shuō)我怎么就攤上這事姊扔。” “怎么了梅誓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵旱眯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我证九,道長(zhǎng)删豺,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任愧怜,我火速辦了婚禮呀页,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拥坛。我一直安慰自己蓬蝶,他們只是感情好尘分,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著丸氛,像睡著了一般培愁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缓窜,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天定续,我揣著相機(jī)與錄音,去河邊找鬼禾锤。 笑死私股,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恩掷。 我是一名探鬼主播倡鲸,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼黄娘!你這毒婦竟也來(lái)了峭状?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逼争,失蹤者是張志新(化名)和其女友劉穎宁炫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體氮凝,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡羔巢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罩阵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竿秆。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖稿壁,靈堂內(nèi)的尸體忽然破棺而出幽钢,到底是詐尸還是另有隱情,我是刑警寧澤傅是,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布匪燕,位于F島的核電站,受9級(jí)特大地震影響喧笔,放射性物質(zhì)發(fā)生泄漏帽驯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一书闸、第九天 我趴在偏房一處隱蔽的房頂上張望尼变。 院中可真熱鬧浆劲,春花似錦嫌术、人聲如沸哀澈。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)割按。三九已至,卻和暖如春磷籍,著一層夾襖步出監(jiān)牢的瞬間适荣,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工择示, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晒旅。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓栅盲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親废恋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谈秫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容