在編寫(xiě)下一個(gè)SQL查詢之前閱讀此問(wèn)題
當(dāng)我在Airbnb時(shí),我有很好的機(jī)會(huì),可以在向Brian Chesky報(bào)告的新團(tuán)隊(duì)中工作。這是令人興奮的 - 我們正在扮演一個(gè)新產(chǎn)品系列,所以我們必須每天制作更改游戲的決定。但作為團(tuán)隊(duì)的數(shù)據(jù)科學(xué)家,我始終負(fù)責(zé)采購(gòu)數(shù)據(jù)以指導(dǎo)我們的產(chǎn)品方向,這意味著很多分析工作。
第一周是對(duì)我的上下文開(kāi)關(guān)的能力的艱難測(cè)試:我不得不找到模糊的表格并編寫(xiě)大量查詢,但甚至通過(guò)Beautifulsoup Scrapes和Veartrics API請(qǐng)求正則表達(dá)式。截至第三周,我開(kāi)始累了,所以我需要一個(gè)系統(tǒng)來(lái)保持我的速度。我來(lái)實(shí)現(xiàn),在使用數(shù)據(jù)時(shí),只有兩種可以搞砸的方式:
- 使用錯(cuò)誤的數(shù)據(jù)。
- 錯(cuò)誤的使用數(shù)據(jù)。
這兩個(gè)都可以通過(guò)在數(shù)據(jù)周?chē)哂懈玫纳舷挛膩?lái)解決。
所以我自己做了一個(gè)清單來(lái)減輕這兩個(gè)錯(cuò)誤,以確保我不會(huì)將產(chǎn)品引導(dǎo)到遺忘。我會(huì)在這里分享我的,但是這對(duì)你來(lái)說(shuō)究竟可能取決于你公司的特定籌碼。將此作為一個(gè)示例指南,了解如何讓自己一些好的語(yǔ)境,以使您使用表格的危險(xiǎn),但我鼓勵(lì)您采取這個(gè)并使其成為自己的。
那么我需要什么背景,我如何得到它?
嗯,您需要任何和所有信息,這些信息將減少錯(cuò)誤或使用錯(cuò)誤數(shù)據(jù)的數(shù)據(jù)。在我的經(jīng)驗(yàn)中,只需三個(gè)檢查可以獲得合理的覆蓋:
- 檢查基本表METAData.e.g。列名稱,分區(qū)信息,如何生成。
- 檢查您的假設(shè)。在本專(zhuān)欄中是什么?這是一個(gè)空列嗎?什么是截然不同的價(jià)值?自上次我跑這個(gè)查詢以來(lái)有這些改變嗎?
- 與別人聯(lián)系。其他人在做這張表做什么?你問(wèn)誰(shuí)有疑問(wèn)嗎?
1.檢查基本表元數(shù)據(jù)
第一步是它找到一個(gè)表并弄清楚如何查詢它。
You must woo your table before it will reveal its secrets(Reposted with permission from Olya Tanner)
對(duì)于最基本的信息,如列名,索引信息,分區(qū)信息,查看定義,您通??梢圆樵兿到y(tǒng)表。手頭保留這些表的列表,以便您可以輕松查詢它們。例如,對(duì)于符合ANSI SQL的數(shù)據(jù)庫(kù)(其中大多數(shù)),請(qǐng)記住以下表格通常有助于:
- Information_schema.columnScolumn 名稱,分區(qū)信息,列類(lèi)型,無(wú)效。
- Information_schema.tables和Information_schema.viewSnice列表所有表和視圖。視圖,您通??梢垣@得DDL語(yǔ)句。
您通常還可以獲得其他人寫(xiě)的查詢歷史,這可以幫助弄清楚如何使用表格。您甚至可以通過(guò)語(yǔ)句類(lèi)型進(jìn)行過(guò)濾(例如,創(chuàng)建,插入,選擇)以確定如何創(chuàng)建表:
- Information_schema.jobs_by_project(bigquery)表(Information_schema.query_history())
2.檢查您的假設(shè)。
記下您的假設(shè)并運(yùn)行查詢來(lái)檢查它們。
A nice illustration of a person making a checklist, in case you haven’t seen one before.
此時(shí)您希望查看數(shù)據(jù)是否是您認(rèn)為的。雖然我的典型方法是隨意走過(guò)的選擇*并選擇不同的語(yǔ)句,但這是次優(yōu)。更好的方法是首先弄清楚:
我需要回答什么問(wèn)題,我制作了什么假設(shè)?
寫(xiě)下這些,然后寫(xiě)下回答這些問(wèn)題的查詢/驗(yàn)證這些假設(shè)。它可能聽(tīng)起來(lái)很簡(jiǎn)單,但如果你做出錯(cuò)誤的假設(shè),你必須重新開(kāi)始。我們?cè)谑褂脭?shù)據(jù)時(shí)都做出假設(shè) - 如果您沒(méi)有明確到他們,這是一個(gè)災(zāi)難的配方。
最近項(xiàng)目的一些示例:
- 每次活動(dòng)只有一行嗎?
- 該字段的可能值是什么?
- 這個(gè)專(zhuān)欄是無(wú)數(shù)的嗎?
- 如果為null,則對(duì)這些空值有任何系統(tǒng)模式?
我個(gè)人使用鯨魚(yú)(CLI工具,如果我感到不耐煩)或運(yùn)行的dataframe(甚至計(jì)劃)這些快速檢查,但無(wú)論您使用什么,只需確保將它們保持持久。
最后,是的,它很好 - 繼續(xù)進(jìn)行選擇*。有時(shí)您只需要查看一片數(shù)據(jù)。
3.與其他人聯(lián)系
既然你已經(jīng)有一種感覺(jué)的數(shù)據(jù)的形式,只是潛入并建立你需要建立的東西。別。您需要盡可能多地獲得各種社交環(huán)境和部落知識(shí),并且在大型組織中尤其如此。
現(xiàn)在是時(shí)候收集部落知識(shí)了。
我知道這些人沒(méi)有面孔,但是在獲得一些其他社交環(huán)境之后,您難道不就讓右邊的家伙感到高興嗎?
不幸的是,只有這么多,您可以通過(guò)單獨(dú)疏浚數(shù)據(jù)來(lái)獲得。您需要與真實(shí)的人交談(或找到一些最新的文件)。
通過(guò)查詢?nèi)罩?見(jiàn)上文),通過(guò)Github的Slog(如果您的查詢是版本控制的),或者檢查表的所有者是誰(shuí)(您通??梢栽跀?shù)據(jù)上下文/發(fā)現(xiàn)工具中這樣做,如dataframe) - 只是找一個(gè)人懈怠。
一般來(lái)說(shuō),我問(wèn)以下問(wèn)題:
- 這是維持嗎?
- 這是用于{{你的場(chǎng)景}}的最佳數(shù)據(jù)嗎?
迄今為止你所做的事情是開(kāi)放的。你可能在錯(cuò)誤的表上,但人們欣賞一些爭(zhēng)議。
結(jié)束言論
如果這一切聽(tīng)起來(lái)有點(diǎn)過(guò)分,請(qǐng)查看DataFrame。我們正在構(gòu)建一個(gè)數(shù)據(jù)上下文平臺(tái),使得找到所有這些信息的所有信息都很容易 - 它是免費(fèi)的。搜索表,獲取基本元數(shù)據(jù),探索數(shù)據(jù),并在一個(gè)地方獲取社交上下文。好的銷(xiāo)售。對(duì)不起,我忍不住自己 - 我對(duì)我們的產(chǎn)品真的很興奮。
我希望您帶走這篇文章的一條消息:將您的Ad-hoc分析與盡可能多的嚴(yán)謹(jǐn)性。在您的職業(yè)生涯中可能發(fā)生的最令人尷尬的事情之一是實(shí)現(xiàn)中間解釋?zhuān)茨慕Y(jié)果可能是錯(cuò)誤的。在每次編寫(xiě)查詢時(shí),在不可轉(zhuǎn)讓的背景下設(shè)置一些最佳實(shí)踐是一種很好的方法來(lái)減輕至少一些下行。
或?yàn)樽约后w驗(yàn)它。然后回到這里并再次閱讀這一點(diǎn)。