2011年,我作為一名商業(yè)智能工程師加入 Facebook。到了 2013 年離開(kāi)的時(shí)候,我的職稱是數(shù)據(jù)工程師。
獲得這個(gè)職稱,并不是因?yàn)槲冶簧毣蚴欠峙?。而?Facebook 覺(jué)得我們的工作已經(jīng)超越了典型的商業(yè)智能。我們?yōu)樽约簞?chuàng)造的這個(gè)新角色是個(gè)全新的學(xué)科。
我的團(tuán)隊(duì)處在這場(chǎng)變革的前線。我們一直在開(kāi)發(fā)新的技能呢、新的處理方式、新的工具,而且通常與傳統(tǒng)方式背道而馳。
我們是先頭部隊(duì)!我們是數(shù)據(jù)工程師!
數(shù)據(jù)工程是什么?
數(shù)據(jù)科學(xué)作為一個(gè)學(xué)科,已度過(guò)其自我肯定和自我定義的青春期。而處在同期的數(shù)據(jù)工程,是個(gè)年齡稍小的弟弟,但是也在度過(guò)相似的階段。數(shù)據(jù)工程學(xué)科以其兄長(zhǎng)為榜樣,但也在相反的領(lǐng)域定義自己,并找尋屬于自已的身份。
數(shù)據(jù)工程師也像數(shù)據(jù)科學(xué)家一樣要寫代碼。數(shù)據(jù)科學(xué)家有很好的分析能力,并且對(duì)數(shù)據(jù)可視化很感興趣。與數(shù)據(jù)科學(xué)家不同,而且受啟發(fā)于我們更顯成熟的父學(xué)科——軟件工程,數(shù)據(jù)工程師要構(gòu)建工具、基礎(chǔ)設(shè)施、框架和服務(wù)。事實(shí)上可以證明,相比數(shù)據(jù)科學(xué),數(shù)據(jù)工程更接近軟件工程。
如果討論與既有職責(zé)的關(guān)系,數(shù)據(jù)工程領(lǐng)域可以認(rèn)為是商業(yè)智能和數(shù)據(jù)倉(cāng)庫(kù)的超集,而且更多的元素是從軟件工程得來(lái)的。這個(gè)學(xué)科也囊括了所謂的“大數(shù)據(jù)”分布式系統(tǒng)的相關(guān)領(lǐng)域內(nèi)容,以及廣泛的Hadoop生態(tài)圈、流式處理和大規(guī)模計(jì)算的相關(guān)概念。
在還沒(méi)有正規(guī)化的數(shù)據(jù)基礎(chǔ)架構(gòu)團(tuán)隊(duì)的小公司里,數(shù)據(jù)工程的職責(zé)也會(huì)涵蓋搭建和維護(hù)組織數(shù)據(jù)基礎(chǔ)架構(gòu)的工作任務(wù)。這包括搭建和維護(hù)像 Hadoop/Hive/HBase、Spark 平臺(tái)之類的活。
在小一些的環(huán)境里,人們傾向使用 Amazon 或 Databricks之類的托管服務(wù),或者從 Cloudera 或 Hortonworks 之類的廠商獲取支持,這本質(zhì)上就是將數(shù)據(jù)工程的職責(zé)外包給了其他公司。
在大一些的環(huán)境里,由于對(duì)數(shù)據(jù)基礎(chǔ)架構(gòu)團(tuán)隊(duì)的需求越來(lái)越高時(shí),組織更傾向于專門指定或者開(kāi)設(shè)一個(gè)正式的角色來(lái)處理這些工作。在這些組織中,這個(gè)把數(shù)據(jù)工程流程自動(dòng)化的職責(zé),同時(shí)落到了數(shù)據(jù)工程團(tuán)隊(duì)和數(shù)據(jù)基礎(chǔ)架構(gòu)團(tuán)隊(duì)手中,而且兩個(gè)團(tuán)隊(duì)合作解決高級(jí)問(wèn)題也是很常見(jiàn)的。
雖然這個(gè)角色在工程方面的范圍在擴(kuò)大,但其他原本作為商業(yè)工程角色的應(yīng)關(guān)注的方面,卻變得越來(lái)越次要。比如像構(gòu)建和維護(hù)大量的報(bào)表和儀表板,已不是一個(gè)數(shù)據(jù)工程師的主要關(guān)注領(lǐng)域。
我們現(xiàn)在有了更好的自服務(wù)工具,可以讓分析師、數(shù)據(jù)科學(xué)家和廣義的“信息工作者”變得更精通數(shù)據(jù),可以獨(dú)自應(yīng)付數(shù)據(jù)的使用。
ETL 在變化
我們也觀察到從拖拽式 ETL (Extract Transform and Load) 工具到一種更加可編程化的方式的大體轉(zhuǎn)變。像 Informatica、IBM Datastage、Cognos、AbInitio 和 Microsoft SSIS 之類的平臺(tái)技術(shù)掌握在現(xiàn)在的數(shù)據(jù)工程師中并不常見(jiàn),取而代之的是更通用的軟件工程技能,和對(duì)編程或配置驅(qū)動(dòng)的平臺(tái)技術(shù)的掌握,像 Airflow、Oozie、Azkabhan 或 Luigi。工程師開(kāi)發(fā)和維護(hù)自己的任務(wù)編排器/調(diào)度器也是很常見(jiàn)的。
有很多不使用拖拽工具開(kāi)發(fā)復(fù)雜軟件的理由:但最重要的是代碼才是對(duì)軟件最好的抽象。討論這個(gè)話題超出了本文的范圍,但是也很容易推導(dǎo)出為什么要用代碼寫 ETL,原因和寫其他軟件是一樣的。代碼允許任意程度的抽象,允許使用熟悉的方法進(jìn)行所有邏輯處理,可以很好地和源控制集成,也易于版本管理和協(xié)作。事實(shí)上 ETL 工具暴露圖形接口給用戶像是數(shù)據(jù)處理發(fā)展史上的一個(gè)迂回,這個(gè)話題都可再單獨(dú)寫成一篇有意思的博客了。
讓我們強(qiáng)調(diào)下這個(gè)事實(shí),傳統(tǒng) ETL 工具所暴露出的這種抽象是達(dá)不到目的的。我們當(dāng)然需要將數(shù)據(jù)處理、計(jì)算以及存儲(chǔ)進(jìn)行抽象,但我覺(jué)得解決的方法并不是將 ETL 元語(yǔ)(比如源/目標(biāo)、聚合、過(guò)濾條件)展現(xiàn)為一種拖拽風(fēng)格,需要的是一種更高級(jí)的抽象。
舉例說(shuō)明,在現(xiàn)代數(shù)據(jù)環(huán)境中做抽象, A/B 測(cè)試框架的試驗(yàn)設(shè)置:整個(gè)試驗(yàn)是什么樣的?相關(guān)的處理操作是什么?應(yīng)該暴露給多少比例的用戶?預(yù)期每個(gè)試驗(yàn)會(huì)影響哪些度量?試驗(yàn)什么時(shí)候生效?在這個(gè)例子中,我們有一個(gè)需要接收精確、高級(jí)輸入,需要進(jìn)行復(fù)雜統(tǒng)計(jì)學(xué)運(yùn)算以及得出計(jì)算結(jié)果的框架。我們期望如果引入一個(gè)新的試驗(yàn),就可以相應(yīng)進(jìn)行額外的運(yùn)算并得到額外的結(jié)果。在這個(gè)例子中,我們要注意的重點(diǎn)是,在這個(gè)抽象中輸入變量并不是由傳統(tǒng) ETL 工具給出的,而且在拖拽界面中構(gòu)建這樣一個(gè)抽象也毫無(wú)操作性可言。
對(duì)于現(xiàn)代數(shù)據(jù)工程師而言,傳統(tǒng)的 ETL 工具大多數(shù)都已過(guò)時(shí)了,因?yàn)闊o(wú)法用代碼表達(dá)邏輯。因此所需要的抽象也就不能用這些工具直觀表達(dá)。現(xiàn)在大家知道了數(shù)據(jù)工程師的職責(zé)包括了設(shè)計(jì)大量的 ETL,并且知道了一套全新工具和方法論是必需的,可以說(shuō)這迫使這個(gè)學(xué)科從頭重建。數(shù)據(jù)工程師需要新的技術(shù)棧、新的工具、一套新的約束,并且很多時(shí)候,是新的一代人。
數(shù)據(jù)建模在改變
典型的數(shù)據(jù)建模技術(shù)(比如星型模型),曾經(jīng)定義了我們典型地通過(guò)數(shù)據(jù)倉(cāng)庫(kù)為分析工作進(jìn)行數(shù)據(jù)建模的方法,但現(xiàn)在已不像之前那樣重要。傳統(tǒng)的數(shù)據(jù)倉(cāng)庫(kù)最佳實(shí)踐已經(jīng)改變。存儲(chǔ)和計(jì)算要比以前便宜,而且隨著可線性擴(kuò)展的分布式數(shù)據(jù)庫(kù)的出現(xiàn),工程時(shí)間成了更緊缺的資源。
這里列舉一些數(shù)據(jù)建模技術(shù)方面的變化:
進(jìn)一步反范式化:在維度中維護(hù)代理鍵這件事可能很棘手,而且這使得事實(shí)表的可讀性變差。而在事實(shí)表中使用自然的讓人可讀的鍵和維度屬性變得越來(lái)越普遍,省去了在分布式數(shù)據(jù)庫(kù)中大量繁重的 join 操作。同時(shí)要注意像 Parquet 或者 ORC 之類的序列化格式,或者 Vertica 之類的數(shù)據(jù)庫(kù)引擎,都提供了編碼和壓縮的支持,這可以減少通常由于使用反范式化所帶來(lái)的性能損失。那些系統(tǒng)本身具備為存儲(chǔ)進(jìn)行范式化的能力。
blobs(二進(jìn)制大對(duì)象):現(xiàn)代數(shù)據(jù)庫(kù)已經(jīng)逐漸通過(guò)本地類型和方法支持 blobs。這讓數(shù)據(jù)建模師學(xué)會(huì)了新的招式,并且可以讓事實(shí)表根據(jù)需要一次存儲(chǔ)多個(gè)粒度的數(shù)據(jù)。
動(dòng)態(tài)模式:由于 MapReduce 的出現(xiàn),以及文檔存儲(chǔ)越來(lái)越流行,和 blobs 在數(shù)據(jù)庫(kù)中的支持,不需要執(zhí)行 DML(數(shù)據(jù)操作語(yǔ)言)就改進(jìn)數(shù)據(jù)庫(kù)模式變得更容易。這使得以迭代方式去建數(shù)據(jù)倉(cāng)庫(kù)更加容易,也免得開(kāi)發(fā)前需要達(dá)成完全一致和認(rèn)同。
系統(tǒng)化維度快照(在每個(gè) ETL 調(diào)度周期為維度存儲(chǔ)一個(gè)全量副本,通常存儲(chǔ)在獨(dú)立的表分區(qū))作為一種處理緩慢變化維(SCD, slowly changing dimension)的通用方法,只要很少的工作量,是一種簡(jiǎn)單通用的方式。而且這種方式不像經(jīng)典方式,在寫 ETL 或者類似的查詢時(shí)可以很容易掌握。將維度屬性反范式化到事實(shí)表,在事務(wù)發(fā)生時(shí)就直接記錄維度屬性值,,也是一種容易并且相對(duì)廉價(jià)的方式?;叵胍幌?,復(fù)雜的 SCD 建模技術(shù)其實(shí)是不直觀的,而且降低了可訪問(wèn)性。
一致性:一致性維度和度量在現(xiàn)在的數(shù)據(jù)環(huán)境中,依然是極為重要的。但是隨著數(shù)據(jù)倉(cāng)庫(kù)需求的快速變化,隨著更多的團(tuán)隊(duì)和角色被邀請(qǐng)到這項(xiàng)工作中貢獻(xiàn)力量,一致性就少了一分必要性,更多的是一種權(quán)衡。當(dāng)分歧的痛點(diǎn)變得無(wú)法控制,其背后也會(huì)產(chǎn)生一致和趨同。
角色和任務(wù)
數(shù)據(jù)倉(cāng)庫(kù)
“數(shù)據(jù)倉(cāng)庫(kù)是一個(gè)專門為查詢和分析而構(gòu)造的事務(wù)數(shù)據(jù)副本。” — Ralph Kimball
數(shù)據(jù)倉(cāng)庫(kù)是一個(gè)面向主題的、集成的、時(shí)變的、非易失的集合,用來(lái)支持管理層的決策制定過(guò)程。 — Bill Inmon
數(shù)據(jù)倉(cāng)庫(kù)依然像之前一樣重要,數(shù)據(jù)工程師負(fù)責(zé)了很多方面的數(shù)據(jù)倉(cāng)庫(kù)建設(shè)和運(yùn)維的工作。數(shù)據(jù)工程師的焦點(diǎn)就是數(shù)據(jù)倉(cāng)庫(kù)和相關(guān)工作。
現(xiàn)代數(shù)據(jù)倉(cāng)庫(kù)應(yīng)該是比之前更加開(kāi)放的設(shè)施,歡迎數(shù)據(jù)科學(xué)家、分析師和軟件工程師去參與到建設(shè)和維護(hù)中。如果企業(yè)活動(dòng)限制了什么角色才能夠管理數(shù)據(jù)流程,那數(shù)據(jù)顯然就過(guò)于中心化了。雖然這允許隨著組織的數(shù)據(jù)需求而相應(yīng)擴(kuò)展,但是經(jīng)常導(dǎo)致形成了更混亂的、走形的、不完善的基礎(chǔ)設(shè)施。
數(shù)據(jù)工程團(tuán)隊(duì)通常會(huì)擁有數(shù)據(jù)倉(cāng)庫(kù)中幾片有保證的、高質(zhì)量的區(qū)域。比如在 Airbnb,有一組“核心”模式(schema)由數(shù)據(jù)工程團(tuán)隊(duì)管理,這里有清晰定義和度量的服務(wù)等級(jí)協(xié)議(SLA,service level agreement),嚴(yán)格遵守命名約定,并且相關(guān)的流水線代碼遵循一套最佳實(shí)踐。
為數(shù)據(jù)對(duì)象制定標(biāo)準(zhǔn)、最佳實(shí)踐和認(rèn)證流程的“卓越中心”,這也成為數(shù)據(jù)工程團(tuán)隊(duì)的職責(zé)之一。團(tuán)隊(duì)可以進(jìn)而去參與或領(lǐng)導(dǎo)一個(gè)項(xiàng)目來(lái)分享其核心能力,以幫助其他團(tuán)隊(duì)成為更佳的數(shù)據(jù)倉(cāng)庫(kù)公民。比如,F(xiàn)acebook 有一個(gè)“數(shù)據(jù)夏令營(yíng)”的培訓(xùn)項(xiàng)目,Airbnb 正在開(kāi)發(fā)一個(gè)類似的“數(shù)據(jù)大學(xué)”的項(xiàng)目,數(shù)據(jù)工程師在這里主持會(huì)議來(lái)教大家如何熟練使用數(shù)據(jù)。
數(shù)據(jù)工程師也是數(shù)據(jù)倉(cāng)庫(kù)的“圖書管理員”,編目和組織元數(shù)據(jù),定義從倉(cāng)庫(kù)歸檔或提取數(shù)據(jù)的流程。在一個(gè)快速生長(zhǎng)、迅速演變、輕度混亂的數(shù)據(jù)環(huán)境,元數(shù)據(jù)管理和元數(shù)據(jù)工具成為一個(gè)現(xiàn)代數(shù)據(jù)平臺(tái)的關(guān)鍵組件。
性能調(diào)整和優(yōu)化
隨著數(shù)據(jù)變得比以前更加具有戰(zhàn)略意義,企業(yè)為他們的數(shù)據(jù)基礎(chǔ)設(shè)施建設(shè)所提高的預(yù)算確實(shí)令人印象深刻。這樣,數(shù)據(jù)工程師把時(shí)間花在數(shù)據(jù)處理和存儲(chǔ)的性能調(diào)整和優(yōu)化上也就更加合理。由于在方面的預(yù)算極少縮減,優(yōu)化往往從在相同的資源下完成更多事情的角度出發(fā),或者是從試圖使資源利用和開(kāi)銷的指數(shù)級(jí)增長(zhǎng)線性化的角度。
知道了數(shù)據(jù)工程棧發(fā)展的復(fù)雜性正在暴增,我們可以設(shè)想優(yōu)化這個(gè)棧和流程的復(fù)雜度也同樣充滿挑戰(zhàn)??赡芎苋菀淄ㄟ^(guò)很小的努力獲得巨大成功的地方,收益遞減法則通常是適用的。
建設(shè)可以隨企業(yè)規(guī)模增長(zhǎng)的基礎(chǔ)設(shè)施(或在其上建設(shè)),并時(shí)刻保持資源意識(shí),無(wú)疑是對(duì)數(shù)據(jù)工程師有好處的。
數(shù)據(jù)集成
數(shù)據(jù)集成,是通過(guò)數(shù)據(jù)交換來(lái)集成業(yè)務(wù)和系統(tǒng)其背后的實(shí)際操作,它和以前同樣重要,也和以前同樣充滿挑戰(zhàn)。由于軟件即服務(wù)(SaaS, Software as a Service)逐漸成為企業(yè)運(yùn)營(yíng)的新標(biāo)準(zhǔn)方式,跨越這些系統(tǒng)來(lái)同步相關(guān)數(shù)據(jù)就成為更加關(guān)鍵的需求了。不僅SaaS服務(wù)本身需要最新的數(shù)據(jù)來(lái)運(yùn)行,我們通常也想把產(chǎn)生在SaaS側(cè)的數(shù)據(jù)拿到數(shù)據(jù)倉(cāng)庫(kù),來(lái)和我們其他數(shù)據(jù)一起進(jìn)行分析。當(dāng)然SaaS經(jīng)常會(huì)提供它們自己的分析,但是沒(méi)有系統(tǒng)地支持企業(yè)中其余數(shù)據(jù)所能提供的視角,通常得把這些數(shù)據(jù)拉取回來(lái)。
不集成和共享通用的主鍵,就讓 SaaS 服務(wù)重新定義參考數(shù)據(jù),這簡(jiǎn)直是場(chǎng)災(zāi)難,應(yīng)該極力避免。誰(shuí)也不想人為地在兩個(gè)不同的系統(tǒng)中維護(hù)兩份雇員和顧客列表。最糟糕的是,必須要在把他們的 HR 數(shù)據(jù)拉回倉(cāng)庫(kù)時(shí)做模糊匹配。
最壞的情況,企業(yè)高管經(jīng)常會(huì)在不實(shí)際考慮數(shù)據(jù)集成難度的情況下和 SaaS 提供商簽約。提供商特意計(jì)劃好淡化這些集成任務(wù),以促進(jìn)他們的銷售,然后讓數(shù)據(jù)工程師受困于去做充滿疑問(wèn)的、不被重視的工作。更不用說(shuō)事實(shí)上典型的 SaaS API 經(jīng)常設(shè)計(jì)不合理、文檔不清晰,并且是“敏捷”的:就是說(shuō)你可以認(rèn)為它們會(huì)在不做通知的情況下改版。
服務(wù)
數(shù)據(jù)工程師工作在一種更高層級(jí)的抽象中,就是說(shuō)在某些場(chǎng)景下要提供服務(wù)和工具來(lái)使數(shù)據(jù)工程師、數(shù)據(jù)科學(xué)家或者分析師要手動(dòng)來(lái)完成的工作自動(dòng)化。
這里列舉數(shù)據(jù)工程師和數(shù)據(jù)基礎(chǔ)架構(gòu)工程師可能構(gòu)建和維護(hù)的一小部分服務(wù)。
數(shù)據(jù)攝取:圍繞“爬取”數(shù)據(jù)庫(kù)、載入日志、從外部存儲(chǔ)和API獲取數(shù)據(jù)的服務(wù)和工具
指標(biāo)計(jì)算:計(jì)算和匯總相關(guān)參與指標(biāo)、增長(zhǎng)指標(biāo)或細(xì)分指標(biāo)量的框架
異常檢測(cè):使數(shù)據(jù)處理自動(dòng)化,以便當(dāng)異常事件發(fā)生或趨勢(shì)明顯變化時(shí)警示相關(guān)人員
元數(shù)據(jù)管理:可以生成和消費(fèi)元數(shù)據(jù),并方便在數(shù)據(jù)倉(cāng)庫(kù)中查找信息的相關(guān)工具。
實(shí)驗(yàn):A/B測(cè)試和實(shí)驗(yàn)框架通常是一個(gè)重要的企業(yè)分析,并帶有一個(gè)關(guān)鍵的數(shù)據(jù)工程模塊。
檢測(cè)儀:從日志時(shí)間和相關(guān)屬性到那些事件,數(shù)據(jù)工程師
會(huì)話:為幫助分析師理解用戶行為,為理解時(shí)間行為序列專門設(shè)計(jì)的流水線。
就像軟件工程師一樣,數(shù)據(jù)工程師必須不斷關(guān)注工作自動(dòng)化、構(gòu)建抽象來(lái)使他們能應(yīng)對(duì)重重困難。雖然環(huán)境不同,可自動(dòng)化的工作的性質(zhì)不同,但自動(dòng)化的需求在各個(gè)環(huán)境是普遍存在的。
技能要求
精通SQL:如果說(shuō)英語(yǔ)是商業(yè)語(yǔ)言,那 SQL 就是數(shù)據(jù)語(yǔ)言。如果英語(yǔ)都說(shuō)不好的話,作為一個(gè)商務(wù)人士又能做的怎么樣呢?雖然一代又一代技術(shù)老去和退出舞臺(tái),但是 SQL 一直作為數(shù)據(jù)的通用語(yǔ)言頑強(qiáng)地活著。數(shù)據(jù)工程師應(yīng)該能夠使用 SQL 表達(dá)各種復(fù)雜邏輯,比如使用“關(guān)聯(lián)子查詢”和窗口函數(shù)。
SQL/DML/DDL 原語(yǔ)已經(jīng)足夠簡(jiǎn)單,對(duì)于數(shù)據(jù)工程師來(lái)說(shuō)應(yīng)該完全掌握了。除了SQL的聲明特性,數(shù)據(jù)工程師還應(yīng)該有能力理解數(shù)據(jù)庫(kù)的執(zhí)行計(jì)劃,并明白每個(gè)步驟是什么,明白索引是如何工作的,明白不同的 join 算法,以及執(zhí)行計(jì)劃的分布維度(distributed dimension)。
數(shù)據(jù)建模技術(shù):對(duì)于數(shù)據(jù)工程師來(lái)說(shuō),應(yīng)該對(duì)實(shí)體/關(guān)系模型形成一種認(rèn)知反射(cognitive reflex),并且對(duì)范式化有清晰的認(rèn)識(shí),同時(shí)對(duì)權(quán)衡反范式化有敏銳的直覺(jué)。數(shù)據(jù)工程師應(yīng)該熟悉維度建模和相關(guān)概念和用語(yǔ)。
ETL 設(shè)計(jì):編寫高效、可擴(kuò)展的、“可演化”的 ETL 才是關(guān)鍵。我正計(jì)劃在接下來(lái)的博文中具體討論這個(gè)主題。
架構(gòu)規(guī)劃:就像任何專業(yè)領(lǐng)域的專家,數(shù)據(jù)工程師需要對(duì)大多數(shù)工具、平臺(tái)、庫(kù)和其他可以運(yùn)用的資源有一個(gè)較高層級(jí)的理解。比如不同種類的數(shù)據(jù)庫(kù)、計(jì)算引擎、流處理器、消息隊(duì)列、工作流編排器、序列化格式和其他相關(guān)技術(shù)背后的屬性、用例和微妙之處。設(shè)計(jì)解決方案時(shí),數(shù)據(jù)工程師必須能夠?qū)κ褂媚姆N技術(shù)做出好的選擇,能夠想象到如何使它們協(xié)同工作。
總而言之
通過(guò)過(guò)去 5 年在硅谷 Airbnb、Facebook、Yahoo! 的工作,以及和像 Google、Netflix、Amazon、Uber、Lyft 等幾十個(gè)各種體量的公司的各種類型的數(shù)據(jù)團(tuán)隊(duì)的豐富交流,我發(fā)現(xiàn)大家對(duì)于“數(shù)據(jù)工程師”的發(fā)展成什么樣,看法越來(lái)越趨于一致,而且我覺(jué)得有必要分享一些我的發(fā)現(xiàn)。
我希望這篇文章可作為某種意義上的數(shù)據(jù)工程宣言,并且我希望可以在從事相關(guān)領(lǐng)域的社區(qū)中激起回應(yīng)。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
6837瀏覽量
88754 -
工程師
+關(guān)注
關(guān)注
59文章
1565瀏覽量
68411
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論