视频: Hadoop 影音教學 Day3 : Hive 語法與基本概念介紹(上) 2024
您可能已经知道关系数据库建模和设计方面的专家通常花费大量时间设计规范化数据库或 模式< 。数据库 规范化 是一种在数据更新和检索时防止数据丢失,冗余和其他异常的技术。 专家遵循一些规则来达到规范化的数据库,但是规则1是必须以
组 表结束。 (一个存储所有数据的大表是不正常的 - 双关意图)。根据用例不同,有很多例外情况,但是一般都遵循很多表的规律,特别是对于支持事务或分析处理的数据库(商业智能,例如)。 <!当你开始查询和分析你的数据时,表格会根据它们之间使用SQL定义的关系进行连接 - 这意味着当你开始连接表格时,磁盘最终会在你的服务器上忙碌,繁忙的磁盘通常会导致较慢的用户响应时间。然而,好消息是RDBMS和EDW会尽可能快地加入。
与Hive中的连接有什么关系?那么请记住,Hive的底层操作系统是(惊喜!)Apache Hadoop:MapReduce是连接表的引擎,Hadoop文件系统(HDFS)是底层存储。对于希望用Hive创建,管理和分析大型表格的用户来说,这是个好消息。
解锁隐藏在海量数据结构中的信息的潜力令人兴奋。然而,与Hive的联合通常不如RDBMS / EDW中那么好,所以初次使用的用户常常对系统响应的“pokiness”感到惊讶。请记住,MapReduce和HDFS针对大数据分析的吞吐量进行了优化,并且在这个世界中,
延迟- 换句话说,用户响应时间通常很高。 Hive专为批量式分析处理而设计,不适用于快速在线事务处理。希望在Apache Hadoop上使用SQL获得最佳性能的用户可以使用解决方案。
以下是使用航班数据表的Hive连接示例。清单显示了如何从更大的FlightInfo2007和FlightInfo2008表创建并显示myflightinfo2007表和myflightinfo2008表。该计划一直是使用CTAS创建的myflightinfo2007和myflightinfo2008表来说明如何在Hive中执行连接。
该图显示了使用SQuirreL SQL客户端与myflightinfo2007和myflightinfo2008表进行内部联接的结果。
Hive支持
equi-join,
是仅在连接谓词中使用相等比较的特定类型的连接。 (ON m8。FlightNum = m7。FlightNum是一个equi-join的一个例子。)其他比较器,如小于(<)不支持。这个限制只是因为底层MapReduce引擎的限制。另外,您不能在ON子句中使用OR。
该图说明了内联接和其他两个Hive联接类型的前面的示例。请注意,您可以通过查看myflight2007和myflight2008表的内容来确认内部联接的结果。
下图说明如果您不熟悉这种技术,内连接如何使用维恩图。这里的基本思想是内连接返回两个表之间匹配的记录。因此,内部连接是一个完美的分析工具,可以确定2007年7月和2008年7月从JFK(纽约)到ORD(芝加哥)的航班是否相同。 优化Hive连接是Hive社区中的热门话题。有关当前优化技术的更多信息,请参阅Hive wiki上的Join Optimization页面。