个人理财 使用Hive <[SET:descriptioncn]连接表与Hive

使用Hive <[SET:descriptioncn]连接表与Hive

视频: Hadoop 影音教學 Day3 : Hive 語法與基本概念介紹(上) 2025

视频: Hadoop 影音教學 Day3 : Hive 語法與基本概念介紹(上) 2025
Anonim

您可能已经知道关系数据库建模和设计方面的专家通常花费大量时间设计规范化数据库或 模式< 。数据库 规范化 是一种在数据更新和检索时防止数据丢失,冗余和其他异常的技术。 专家遵循一些规则来达到规范化的数据库,但是规则1是必须以

组 表结束。 (一个存储所有数据的大表是不正常的 - 双关意图)。根据用例不同,有很多例外情况,但是一般都遵循很多表的规律,特别是对于支持事务或分析处理的数据库(商业智能,例如)。 <!当你开始查询和分析你的数据时,表格会根据它们之间使用SQL定义的关系进行连接 - 这意味着当你开始连接表格时,磁盘最终会在你的服务器上忙碌,繁忙的磁盘通常会导致较慢的用户响应时间。然而,好消息是RDBMS和EDW会尽可能快地加入。

与Hive中的连接有什么关系?那么请记住,Hive的底层操作系统是(惊喜!)Apache Hadoop:MapReduce是连接表的引擎,Hadoop文件系统(HDFS)是底层存储。对于希望用Hive创建,管理和分析大型表格的用户来说,这是个好消息。

解锁隐藏在海量数据结构中的信息的潜力令人兴奋。然而,与Hive的联合通常不如RDBMS / EDW中那么好,所以初次使用的用户常常对系统响应的“pokiness”感到惊讶。请记住,MapReduce和HDFS针对大数据分析的吞吐量进行了优化,并且在这个世界中,

延迟

- 换句话说,用户响应时间通常很高。 Hive专为批量式分析处理而设计,不适用于快速在线事务处理。希望在Apache Hadoop上使用SQL获得最佳性能的用户可以使用解决方案。

当您开始与Hive连接表时,请牢记这一动态。另请注意,Hive架构师通常会在一定程度上对数据库进行非规范化处理,因此减少较大的表是司空见惯的事情。这就是为什么提供诸如STRUCT和ARRAY等复杂数据类型的原因。您可以使用这些复杂的数据类型将更多的数据打包到一个表中。 由于Hive表通过HDFS读取和写入通常涉及非常大的数据块,您可以在一个表中完全管理的数据越多,整体性能就越好。

磁盘和网络访问比内存访问慢很多,所以尽量减少HDFS的读写操作。记住这个背景信息,你可以解决与Hive的连接问题。幸运的是,Hive开发社区是现实的,并且理解用户希望并需要使用HiveQL连接表。这些知识在EDW增强中变得尤为重要。诸如“可查询”档案之类的用例通常需要加入数据分析。

以下是使用航班数据表的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页面。

使用Hive <[SET:descriptioncn]连接表与Hive

编辑的选择

记录您的思科网络配置与CDP - 傻瓜

记录您的思科网络配置与CDP - 傻瓜

记录思科网络配置有时没有思科发现协议)可能需要花费数小时在布线室跟踪电缆和记录端口。在某些情况下,配线室是一个真正的老鼠的电缆巢,并且可能需要几个小时的导航才能找出哪些交换机连接到哪个交换机,哪些路由器,...

以太网通道诊断信息收集 - 虚拟

以太网通道诊断信息收集 - 虚拟

诊断思科网络中的以太网通道问题,您首先必须能够收集您的交换机及其配置。为了执行这个任务,你一如既往地依靠Show和debug命令。首先,简要介绍一下show命令的内容。 Switch1> enable Switch1#configure terminal Switch2#show EtherChannel ...

扩展访问控制列表(ACL) - 虚拟

扩展访问控制列表(ACL) - 虚拟

扩展访问控制列表(ACL)允许您允许拒绝来自特定IP地址的流量到特定的目标IP地址和端口。它还允许您指定不同类型的流量,如ICMP,TCP,UDP等。不用说,它非常细化,可以使您非常具体。如果...

编辑的选择

电子项目计划步骤1:设想您的电子项目 - 傻瓜

电子项目计划步骤1:设想您的电子项目 - 傻瓜

设计和建立你的电子项目的细节,你应该退后一步,看看大局。首先,你需要确保你有一个坚实的想法为您的项目。你为什么要建立它?它会做什么,谁来使用它,为什么? ...

电子项目计划步骤4:构建您的电路 - 傻瓜

电子项目计划步骤4:构建您的电路 - 傻瓜

而且你对它的操作感到满意,你可以建立一个永久版本的电路。虽然有几种方法可以做到这一点,但最常见的是在印刷电路板(也称为PCB)上构建电路。请注意,在PCB上组装电路...

电子项目计划步骤3:原型电路 - 假人

电子项目计划步骤3:原型电路 - 假人

永久的电路板,你会想确保它的工作。最简单的方法就是在无焊面包板上构建电路。无焊料面包板可以让您快速组装电路元件而不需要焊接任何东西。相反,您只需将其裸露在外...

编辑的选择

如何替换R中的文本 - 虚拟变量

如何替换R中的文本 - 虚拟变量

R中的sub()函数在文本模式,并用替换文本替换此模式。你使用sub()来替代文本文本,并使用其表兄gsub()来替换所有出现的模式。 (gsub()中的g表示全局。)假设你有句子He ...

中如何成功地遵循命名惯例在R - 傻瓜

中如何成功地遵循命名惯例在R - 傻瓜

R是非常自由的,对象和功能。这个自由是一个很大的祝福,同时也是一个很大的负担。没有人不得不遵循严格的规则,所以在R中编程的人基本上可以按照自己的意愿去做。如何选择一个正确的名字...

中使用函数在R中创建并转换脚本后,如何使用R - dummies中的函数

中使用函数在R中创建并转换脚本后,如何使用R - dummies中的函数

再次使用前面显示的Source()命令将其加载到控制台中。现在你看...什么也没有。 R并不让你知道它已经加载了这个函数,但它已经在工作空间中了,你可以检查一下...