- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
智慧交通概述Hive编程技术与应用
目录4.1装载数据到表中4.2通过查询语句向表中插入数据4.3单个查询语句中创建并加载数据4.4导出数据4.5本章小结
第4章HiveQL数据操作HiveQL语句除了能够对Hive中的相关表,如内部表、外部表、分区表、桶表等进行相关的操作之外,还能够对这些表中的数据进行操作,如数据的插入、查询、导出等。本章将对数据操作给出详细的介绍。
第4章HiveQL数据操作4.1装载数据到表中既然Hive没有行级别的数据插入、数据更新和删除操作,那么往表中装载数据的唯一途径就是使用一种“大量”的数据装载操作,或者通过其他方式仅仅将文件写入到正确的目录下。在3.3节中我们已经介绍了如何使用相关命令装载数据到表中,如图4-1所示。图4-1装载数据到表中上面的LOAD命令可以将数据文件装载到Hive表对应的分区目录中。如果Hive表的分区目录不存在的话,这个命令会先创建分区目录,然后再将数据复制到该目录下。
第4章HiveQL数据操作如果目标表是非分区表,那么语句中应该省略PARTITION子句。通常情况下指定的路径应该是一个目录,而不是单个独立的文件。Hive会将所有文件都复制到这个目录中,这使得用户可更方便地组织数据到多文件中。同时在不修改Hive脚本的前提下修改文件命名规则。不管怎样,文件都会被复制到目标表路径下而且文件名会保持不变。如果使用了LOCAL关键字,那么这个路径应该为本地文件系统路径,数据将会被复制到目标位置;如果省略掉LOCAL关键字,那么这个路径应该是分布式文件系统中的路径,数据是从这个路径被转移到目标位置的。LOADDATALOCAL...命令复制本地数据到位于分布式文件系统上的目标位置;而LOADDATA...命令转移分布式文件系统上的数据文件到目标位置。之所以会存在这种差异,是因为用户在分布式文件系统中可能并不需要重复的多份数据文件复制。同时,因为文件是以这种方式移动的,Hive要求源文件和目标文件以及目录在同一个文件系统中。例如,用户不可以使用LOADDATA语句将数据从一个集群的HDFS中装载(转移)到另一个集群的HDFS中。指定全路径会具有更好的鲁棒性,但也同样支持相对路径。当使用本地模式执行时,相对路径相对的是HiveCLI启动时用户的工作目录。对于分布式或者伪分布式模式,这个路径解读为相对于分布式文件系统中用户的根目录,该目录在HDFS中默认为/user/$USER。
第4章HiveQL数据操作如果用户指定了OVERWRITE关键字,那么目标文件夹中之前存在的数据将会被删除掉。如果没有这个关键字,仅仅会把新增的文件增加到目标文件夹中而不会删除之前的数据。然而,如果目标文件夹中已经存在与装载的文件同名的文件,那么旧的同名文件将会被覆盖重写。对于INPATH子句中使用的文件路径还有一个限制,那就是这个路径下不可以包含任何文件夹。Hive并不会验证用户装载的数据和表的模式是否匹配,但而Hive会验证文件格式是否和表结构定义的一致。例如,如果表在创建时定义的存储格式是SequenceFile,那么装载进去的文件也应该是SequenceFile格式才行。
第4章HiveQL数据操作4.2通过查询语句向表中插入数据INSERT语句允许用户通过查询语句向目标表中插入数据。具体实例如下所示:INSERTOVERWRITETABLEemployeesPARTITION(country=US,state=OR)SELECT*fromemployees_tmpetWHEREet.cnty=USANDet.st=OR;其中employees_tmp的表里已经有相关数据了。在表employees_tmp中我们使用不同的名字来表示国家和州,分别称作cnty和st,这样做的原因稍后会进行说明。这里使用了OVERWRITE关键字,因此之前分区中的内容(如果是非分区表,就是之前表中的内容)将会被覆盖掉。这里如果没有使用OVERWRITE关键字或者使用INTO关键字替换掉它的话,那么Hive将会以追加的方式写入数据而不会覆盖掉之前已经存在的内容。这个例子展示了这个功能非常有用的一个常见的场景,即数据已经存在于某个目录下,对于Hive来说其为一个外部表,而现在想将其导入到最终的分区表中。如果用户想将源表数据导入到一个具有不同记录格式(例如,具有不同的字段分割符)的目标表中的话,那么使用这种方式也是很好的。
第4章HiveQL数据操作然而如果表employees_tmp非常大,而且用户需要对65个州都执
文档评论(0)