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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用最短的时间学会C语言,并掌握C语言的精髓所在?

点击上方蓝字关注我,了解更多咨询及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧。”欢喜的是,C语言功能非常强大、应用广泛,一旦掌握了后,你就可以理直气壮地对他人说“我是电脑高…

山西能源计算机专业,山西能源学院计算机科学与技术专业2016年在四川理科高考录取最低分数线...

类似问题答案四川大学计算机科学与技术专业2016年在山西理科高考录取最低分数线学校 地 区 专业 年份 批次 类型 分数 四川大学 山西 计算机科学与技术 2016 一批 理科 610 学校 地 区 专业 年份 批次 类型 分数 四川大学 山西 计算机科学与技术 2016 一批 理科 610 四川大学 山…

apache fop_Apache FOP与Eclipse和OSGi的集成

apache fopApache FOP是由XSL格式化对象( XSL-FO )驱动的开源打印处理器。 例如,将数据对象转换为PDF可能非常有用。 但是,事实证明,将其集成到PDE中并最终以OSGi Service的形式启动和运行有点麻烦。 因此&#xff0c…

2022年最值得学习的 5 种编程语言,你有在学习吗?

点击上方蓝字关注我,了解更多咨询作为一个初学者电脑程序员,很多人都会想知道当下主流的编程语言有哪些,哪些行业和公司都在用它们,因为这些信息可以帮助你了解想要学习的内容,使你更接近最终想用代码完成的事情。今天…

计算机组装名词术语解释,计算机名词解释及简答题总结

计算机名词解释及简答题总结信息技术:指的是用来扩展人们信息器官功能,协助人们更有效地进行信息处理的一类技术1.信息处理:信息的收集、加工、存储、传递、施用相关的行为和活动2.信息产业:是指生产制作信息设备,以及…

wildfly mysql_MySQL作为Kubernetes服务,可从WildFly Pod访问

wildfly mysqlKubernetes上使用Vagrant的Java EE 7和WildFly(技术提示#71)介绍了如何在使用Kubernetes和Docker托管的WildFly上运行琐碎的Java EE 7应用程序。 Java EE 7应用程序是在世界范围内交付的动手实验室 。 它使用与WildFly捆绑在一起…

想学C语言?这些你一定要知道

点击上方蓝字关注我,了解更多咨询首先,你想运行自己的C语言程序,就必须要有一个IDE(集成式开发工具)。不然想运行程序很难。这里有两个方法可以运行你的C语言程序,一个是在菜鸟网站上云运行C语言程序&#…

mongodb实验报告_Dropwizard,MongoDB和Gradle实验

mongodb实验报告介绍 我使用Dropwizard,MongoDB和Gradle创建了一个小项目。 它实际上是作为一个实验性的Guava缓存开始的,作为将计数器发送到MongoDB(或任何其他DB)的缓冲区。 我也想尝试MondleDB插件的Gradle。 接下来&#xff0…

历城职专学前计算机专业,历城职专学前教育专业2020学年第一学期技能运动会拉开帷幕...

原标题:历城职专学前教育专业2020学年第一学期技能运动会拉开帷幕技能运动会学前教育专业技能运动会1月13日,历城职专学前教育专业2020学年第一学期技能运动会拉开帷幕,技能运动会是历城职专对每一位职专学子专业技能考核的一项重要检测&…

guava集合操作类的使用_使用Guava进行测试集合的实现

guava集合操作类的使用我目前正在为LibFX添加一项新功能,为此我创建了一些类似于Java Collections Framework的自定义集合。 我一直在寻找可以与之对抗的测试,并很高兴发现Google的Guava包含了我所需要的:一个庞大的测试套件,可以…

如何正确认识C语言在当今编程领域的地位

点击上方蓝字关注我,了解更多咨询一、什么是语言,什么是C语言,有什么区别与联系?一提到语言这个词,人们自然想到的是像英语、汉语等这样的自然语言,因为它是人和人相互交流信息不可缺少的工具。大家听到我们…

三十学计算机编程,计算机学习三宗罪3——计算机达人成长之路(25)

6、论道(四)计算机学习三宗罪之偏科上文说道木鹏飞声明计算机学习的第二宗罪是学习浮躁,只流于表面而不肯深入底层学习,并指出了编程的三重境界。木鸿飞则继续咨询第三宗罪。“第三宗罪就是偏科。具体来讲有两种表现,一是动手编程和理论学习二…

fx 线程 弹窗_JFXPanel和FX Platform线程陷阱

fx 线程 弹窗JFXPanel是一个组件,可将JavaFX内容嵌入到(旧版;-))Swing应用程序中。 基本上,这使合并两个对象变得非常容易,但是要掌握一些陷阱:两个UI工具箱都是单线程的(Swing:EDT …

计算机操作系统的新技术新知识,计算机操作系统教程:核心与设计原理

计算机操作系统教程:核心与设计原理语音编辑锁定讨论上传视频《计算机操作系统教程——核心与设计原理》是2007年清华大学出版社出版的图书,作者是范策、许宪成、黄红桃。书 名计算机操作系统教程——核心与设计原理作 者范策许宪成黄红桃等ISBN97…

理解好内存管理,C语言就不难学了

点击上方蓝字关注我,了解更多咨询任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,不同的区域又有不同的特性。C语言学习者、尤其是在学习嵌入式…

智伴机器人安卓怎么设置个人热点_周五到!!宿舍断网怎么办,教你一招

对于大学里喜欢上网的小伙伴们,一旦到了断网的时间段,非常的难受,今天小白教大家一招,看到最后!!以后断网再也不怕啦,熬夜伤身,慎用!!相信很多同学都知道了手…

netty socket_Netty:另一种Web(Socket)服务器

netty socket如今, Netty已用于Internet上的各种应用程序中,以处理数千个(如果不是上百万个)聊天对话,包括Minecraft , Twitter和许多其他应用程序在内的多人游戏。 但是,它并没有深入到开发企业…

计算机用户guest无法删除吗,Win7怎么删除Guest账户?

原标题:Win7怎么删除Guest账户?我们都知道,访客帐户是系统附带的帐户。通常,用户给出了访客帐户。为了确保系统的安全性,它是一个限制帐户。使用客人帐户,您有权临时使用我们的计算机。但是,一些…

为什么C语言不会过时?

点击上方蓝字关注我,了解更多咨询评价任何一门编程语言,都是招人骂的。永远是这样。就像是春寒料峭的季节, 街上穿棉袄和穿单衣的擦肩而过,双方一定是同时在心里出现了两个字:“傻逼!”这个在心理学上有个专…

机械装备计算机控制技术考试题,武汉理工大学机电工程学院研究生课程考试试题(肖峻)...

武汉理工大学机电工程学院研究生课程考试试题课程名称 机械装备计算机控制技术Ⅱ一.简答题(合计30分,每题10分)1、计算机控制系统按系统结构和控制功能分为哪几种?分别描述其特点。2、简述几种常用的数字滤波方法及其优、缺点。如何选用各种数…