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