【需求】有时候我们不想导入数据到hive中,而是通过在hive中创建关联表的方式查询hdfs上的数据,之后就能通过hive客户端或者spark应用程序获取hive的数据了。
【原理】由于在hdfs中已存入了我们提前整理好的结构化数据(例如每条记录都是以逗号分隔),那么在hive中建一个相同结构的表,再把此表关联到相应的hdfs目录就可以了。
下面一个小案例讲一下我的经验。步骤——
步骤一:在hive中创建外部表;步骤二:修改hive表,使其关联HDFS指定目录,就能将二者的数据自动关联;步骤三:验证是否关联成功
hive> CREATE EXTERNAL TABLE email_ralationship (sender STRING, receiver STRING, copied STRING)
> PARTITIONED BY (dt STRING)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY '\073'
> STORED AS TEXTFILE;
OK
Time taken: 0.319 seconds
[注意点] 这里的字段分隔符'\073'是ascii码表里的分号表示,hive中不能用FIELDS TERMINATED BY ';' 否则报错
步骤二:修改hive表:使其关联HDFS指定目录,就能将二者的数据自动关联
# 报错:访问被拒绝hive> ALTER TABLE email_ralationship ADD PARTITION (dt="2017-01-09")
> LOCATION "/apps/tony_kidkid/email_relationship/2017-01-09/2017-01-09";
FAILED: Execution Error, return code 1 from org.apache.