- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hive连接JOIN用例详解
SQL里面通常都会用Join来连接两个表,做复杂的关联查询。比如用户表和订单表,能通过join得到某个用户购买的产品;或者某个产品被购买的人群....
Hive也支持这样的操作,而且由于Hive底层运行在hadoop上,因此有很多地方可以进行优化。比如小表到大表的连接操作、小表进行缓存、大表进行避免缓存等等...
下面就来看看hive里面的连接操作吧!其实跟SQL还是差不多的...
数据准备:创建数据--创建表--导入数据
首先创建两个原始数据的文件,这两个文件分别有三列,第一列是id、第二列是名称、第三列是另外一个表的id。通过第二列可以明显的看到两个表做连接查询的结果:
[xingoo@localhost tmp]$ cat aa.txt
1 a 3
2 b 4
3 c 1
[xingoo@localhost tmp]$ cat bb.txt
1 xxx 2
2 yyy 3
3 zzz 5
接下来创建两个表,需要注意的是表的字段分隔符为空格,另一个表可以直接基于当前的表创建。
hive create table aa
(a string,b string,c string)
row format delimited
fields terminated by ;
OK
Time taken: 0.19 seconds
hive create table bb like aa;
OK
Time taken: 0.188 seconds
查看两个表的结构:
hive describe aa;
OK
a string
b string
c string
Time taken: 0.068 seconds, Fetched: 3 row(s)
hive describe bb;
OK
a string
b string
c string
Time taken: 0.045 seconds, Fetched: 3 row(s)
下面可以基于本地的文件,导入数据
hive load data local inpath /usr/tmp/aa.txt overwrite into table aa;
Loading data to table test.aa
OK
Time taken: 0.519 seconds
hive load data local inpath /usr/tmp/bb.txt overwrite into table bb;
Loading data to table test.bb
OK
Time taken: 0.321 seconds
内连接
内连接即基于on语句,仅列出表1和表2符合连接条件的数据。
hive select * from aa a join bb b on a.c=b.a;
WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
Query ID = root_20160824161233_f9ecefa2-e5d7-416d-8d90-e191937e7313
Total jobs = 1
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/apache-hive-2.1.0-bin/lib/log4j-slf4j-impl-2.4.1.jar!
文档评论(0)