drill apache_如何使用Apache Drill分析高度动态的数据集
drill apache
當今的數據是動態的,并由應用程序驅動。 由諸如Web /社交/移動/ IOT等行業趨勢驅動的新業務應用時代的增長正在生成具有新數據類型和新數據模型的數據集。 這些應用程序是迭代的,并且關聯的數據模型通常是半結構化的,無模式的且不斷發展的。 半結構化的元素可以是復雜的/嵌套的,并且無模式,它具有允許在每一行中更改字段的能力,并且可以不斷發展以不斷添加和刪除字段以滿足業務需求。 換句話說,現代數據集不僅涉及體積和速度,還涉及多樣性和可變性。
Apache Drill是業界第一個針對Hadoop和NoSQL的無模式SQL引擎 ,允許業務用戶使用熟悉SQL技能和BI工具以自助服務的方式本地查詢動態數據集,例如JSON。 使用Apache Drill,只需幾分鐘就可以從任何類型的數據中獲取見解,而傳統方法則需要數周甚至數月的時間延遲。
讓我用一個簡單的例子演示一下。 該示例中使用的數據集來自Yelp簽入數據集 。
Yelp簽入數據集具有以下結構(此描述來自上述Yelp站點供參考):
check-in {'type': 'checkin','business_id': (encrypted business id),'checkin_info': {'0-0': (number of checkins from 00:00 to 01:00 on all Sundays),'1-0': (number of checkins from 01:00 to 02:00 on all Sundays),...'14-4': (number of checkins from 14:00 to 15:00 on all Thursdays),...'23-6': (number of checkins from 23:00 to 00:00 on all Saturdays)}, # if there was no checkin for a hour-day block it will not be in the dataset }值得重復以上# if there was no checkin for a hour-day block it will not be in the dataset注釋, # if there was no checkin for a hour-day block it will not be in the dataset 。 這意味著您在“checkin_info”中看到的元素名稱是預先未知的,并且對于每一行都可能有所不同。 這是高度動態數據的簡單但非常強大的示例。 如果我們需要使用任何其他基于HadoopSQL進行分析,則需要首先以扁平的關系結構表示此數據集,這可能既昂貴又耗時。
但是使用Drill,這非常簡單。 不需要ETL /展平。 讓我們看看這是如何完成的。
第1步:首先將Drill下載到您的計算機上,并在幾分鐘內開始
- http://drill.apache.org/download/
- 焦油-xvf apache-drill-0.7.0.tar
請注意,Drill可以本地安裝在桌面上(稱為嵌入式模式)。 您不需要Hadoop 。
步驟2:使用Drill啟動SQLLine,這是一個基于JDBC的預打包應用程序
- bin / sqlline -u jdbc:drill:zk = local
步驟3:開始使用SQL分析數據
首先,讓我們看一下數據集:
0: jdbc:drill:zk=local> select * from dfs.`/users/nrentachintala/Downloads/yelp/yelp_academic_dataset_checkin.json` limit 2; +--------------+------------+-------------+ | checkin_info | type | business_id | +--------------+------------+-------------+ | {"3-4":1,"13-5":1,"6-6":1,"14-5":1,"14-6":1,"14-2":1,"14-3":1,"19-0":1,"11-5":1,"13-2":1,"11-6":2,"11-3":1,"12-6":1,"6-5":1,"5-5":1,"9-2":1,"9-5":1,"9-6":1,"5-2":1,"7-6":1,"7-5":1,"7-4":1,"17-5":1,"8-5":1,"10-2":1,"10-5":1,"10-6":1} | checkin | JwUE5GmEO-sH1FuwJgKBlQ | | {"6-6":2,"6-5":1,"7-6":1,"7-5":1,"8-5":2,"10-5":1,"9-3":1,"12-5":1,"15-3":1,"15-5":1,"15-6":1,"16-3":1,"10-0":1,"15-4":1,"10-4":1,"8-2":1} | checkin | uGykseHzyS5xAMWoN6YUqA | +--------------+------------+-------------+請注意,Drill使您可以直接查詢JSON文件中的數據。 您無需在Hive商店中定義任何前期架構定義。 另外,請注意,第一行和第二行的checkin_info列中的元素名稱不同。
Drill提供了一個名為“ KVGen”(鍵值生成器)的功能,該功能在處理包含包含由動態和未知元素名稱組成的任意映射的復雜數據(例如checkin_info 。 KVGen將動態映射轉換為鍵值對數組,其中鍵代表動態元素名稱。
讓我們在checkin_info元素上應用KVGen來生成鍵值對。
0: jdbc:drill:zk=local> select kvgen(checkin_info) checkins from dfs.`/users/nrentachintala/Downloads/yelp/yelp_academic_dataset_checkin.json` limit 2; +------------+ | checkins | +------------+ | [{"key":"3-4","value":1},{"key":"13-5","value":1},{"key":"6-6","value":1},{"key":"14-5","value":1},{"key":"14-6","value":1},{"key":"14-2","value":1},{"key":"14-3","value":1},{"key":"19-0","value":1},{"key":"11-5","value":1},{"key":"13-2","value":1},{"key":"11-6","value":2},{"key":"11-3","value":1},{"key":"12-6","value":1},{"key":"6-5","value":1},{"key":"5-5","value":1},{"key":"9-2","value":1},{"key":"9-5","value":1},{"key":"9-6","value":1},{"key":"5-2","value":1},{"key":"7-6","value":1},{"key":"7-5","value":1},{"key":"7-4","value":1},{"key":"17-5","value":1},{"key":"8-5","value":1},{"key":"10-2","value":1},{"key":"10-5","value":1},{"key":"10-6","value":1}] | | [{"key":"6-6","value":2},{"key":"6-5","value":1},{"key":"7-6","value":1},{"key":"7-5","value":1},{"key":"8-5","value":2},{"key":"10-5","value":1},{"key":"9-3","value":1},{"key":"12-5","value":1},{"key":"15-3","value":1},{"key":"15-5","value":1},{"key":"15-6","value":1},{"key":"16-3","value":1},{"key":"10-0","value":1},{"key":"15-4","value":1},{"key":"10-4","value":1},{"key":"8-2","value":1}] | +------------+Drill提供了另一個功能,可對稱為“ Flatten”的復雜數據進行操作,以將“ KVGen”產生的鍵-值對列表分成單獨的行,以進一步在其上應用分析功能。
0: jdbc:drill:zk=local> select flatten(kvgen(checkin_info)) checkins from dfs.`/users/nrentachintala/Downloads/yelp/yelp_academic_dataset_checkin.json` limit 20; +------------+ | checkins | +------------+ | {"key":"3-4","value":1} | | {"key":"13-5","value":1} | | {"key":"6-6","value":1} | | {"key":"14-5","value":1} | | {"key":"14-6","value":1} | | {"key":"14-2","value":1} | | {"key":"14-3","value":1} | | {"key":"19-0","value":1} | | {"key":"11-5","value":1} | | {"key":"13-2","value":1} | | {"key":"11-6","value":2} | | {"key":"11-3","value":1} | | {"key":"12-6","value":1} | | {"key":"6-5","value":1} | | {"key":"5-5","value":1} | | {"key":"9-2","value":1} | | {"key":"9-5","value":1} | | {"key":"9-6","value":1} | | {"key":"5-2","value":1} | | {"key":"7-6","value":1} | +------------+請注意,Drill使我們可以在數據集上即時應用KVGen和Flatten函數,而無需預先定義架構,也不需要持久化為中間格式。 它功能強大,可以節省數周甚至數月的延遲,然后才能從數據中獲取價值。
現在,在扁平化數據的輸出上,我們可以使用所有標準SQL功能,例如過濾器,聚合和排序。 讓我們看一些例子。
獲取記錄在Yelp數據集中的簽入總數
0: jdbc:drill:zk=local> select sum(checkintbl.checkins.`value`) as TotalCheckins from ( . . . . . . . . . . . > select flatten(kvgen(checkin_info)) checkins from dfs.`/users/nrentachintala/Downloads/yelp/yelp_academic_dataset_checkin.json` ) checkintbl . . . . . . . . . . . > ; +---------------+ | TotalCheckins | +---------------+ | 4713811 | +---------------+獲取專門針對周日午夜的入住次數
0: jdbc:drill:zk=local> select sum(checkintbl.checkins.`value`) as SundayMidnightCheckins from ( . . . . . . . . . . . > select flatten(kvgen(checkin_info)) checkins from dfs.`/users/nrentachintala/Downloads/yelp/yelp_academic_dataset_checkin.json` ) checkintbl where checkintbl.checkins.key='23-0'; +------------------------+ | SundayMidnightCheckins | +------------------------+ | 8575 | +------------------------+獲取一周中每天的簽到次數
0: jdbc:drill:zk=local> select `right`(checkintbl.checkins.key,1) WeekDay,sum(checkintbl.checkins.`value`) TotalCheckins from ( . . . . . . . . . . . > select flatten(kvgen(checkin_info)) checkins from dfs.`/users/nrentachintala/Downloads/yelp/yelp_academic_dataset_checkin.json` ) checkintbl group by `right`(checkintbl.checkins.key,1) order by TotalCheckins; +------------+---------------+ | WeekDay | TotalCheckins | +------------+---------------+ | 1 | 545626 | | 0 | 555038 | | 2 | 555747 | | 3 | 596296 | | 6 | 735830 | | 4 | 788073 | | 5 | 937201 | +------------+---------------+獲取一天中每小時的簽入次數
0: jdbc:drill:zk=local> select substr(checkintbl.checkins.key,1,strpos(checkintbl.checkins.key,'-')-1) as HourOfTheDay ,sum(checkintbl.checkins.`value`) TotalCheckins from ( . . . . . . . . . . . > select flatten(kvgen(checkin_info)) checkins from dfs.`/users/nrentachintala/Downloads/yelp/yelp_academic_dataset_checkin.json` ) checkintbl group by substr(checkintbl.checkins.key,1,strpos(checkintbl.checkins.key,'-')-1) order by TotalCheckins; +--------------+---------------+ | HourOfTheDay | TotalCheckins | +--------------+---------------+ | 3 | 20357 | | 4 | 21076 | | 2 | 28116 | | 5 | 33842 | | 1 | 45467 | | 6 | 54174 | | 0 | 74127 | | 7 | 96329 | | 23 | 102009 | | 8 | 130091 | | 22 | 140338 | | 9 | 162913 | | 21 | 211949 | | 10 | 220687 | | 15 | 261384 | | 14 | 276188 | | 16 | 292547 | | 20 | 293783 | | 13 | 328373 | | 11 | 338675 | | 17 | 374186 | | 19 | 385381 | | 12 | 399797 | | 18 | 422022 | +--------------+---------------+從上面可以看到,Drill使得瀏覽結構化和半結構化數據變得很容易,而無需任何前期模式管理或ETL。
有關Drill如何與JSON和其他復雜數據格式一起使用的更詳細的教程,請閱讀使用Apache Drill分析Yelp JSON數據: https : //cwiki.apache.org/confluence/display/DRILL/Analyzing+Yelp+JSON+Data+使用+ Apache + Drill
要了解有關Drill的更多信息,請參考以下資源:
- 在此處下載Drill: http : //drill.apache.org/download/
- 我們認為Drill很棒的10個理由 : 使用Apache Drill的10大理由–現在已成為包括Hadoop在內的MapR發行版的一部分
- 一個簡單的10分鐘教程: https : //cwiki.apache.org/confluence/display/DRILL/Apache+Drill+in+10+Minutes
- 更全面的Hadoop教程: https : //cwiki.apache.org/confluence/display/DRILL/Apache+Drill+Tutorial
翻譯自: https://www.javacodegeeks.com/2015/02/analyze-highly-dynamic-datasets-apache-drill.html
drill apache
總結
以上是生活随笔為你收集整理的drill apache_如何使用Apache Drill分析高度动态的数据集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: weld焊接_玩Weld-Probe –
- 下一篇: 产品图案的设计理念和方式产品图案的设计理