Hive 外部表未显示任何内容

Posted

技术标签:

【中文标题】Hive 外部表未显示任何内容【英文标题】:Hive External table not showing anything 【发布时间】:2015-04-27 05:59:48 【问题描述】:

我正在尝试通过以下链接中的 twitter 数据教程来学习 Hive。 https://github.com/cloudera/cdh-twitter-example/

我已经成功安装和配置了 hadoop 和 hive,并测试了简单的文本文件加载到 hive 表中。到目前为止一切正常。

但是,即使文件存在于 hdfs 中,外部表也没有显示任何内容。

我使用下面的代码来创建表格。

CREATE EXTERNAL TABLE (
... 
 Columns ....
...
)
PARTITIONED BY (datehour INT)
ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe'
LOCATION '/user/flume/tweets';

我认为问题出在我的 hdfs 中的文件夹结构.. 它目前遵循年/月/日/小时/如下所示。

/user
  -- /flume
      -- /tweets
          -- /2015         
              -- 04        
                -- 01      
                 -- 13     
                 -- 14
                -- 02
                 -- 15
                 -- 16

在 Hive 中创建外部表时,有没有办法为此文件夹结构正确设置分区?

提前感谢您的帮助...

【问题讨论】:

【参考方案1】:

您必须将分区添加到表中。

  ADD JAR   your-serde-jar-file-path.jar


  ALTER TABLE tweets ADD IF NOT EXISTS PARTITION (datehour = 2015040113) LOCATION '/user/flume/tweets/2015/04/01/13';

-你必须传递 datehour 和 partionpath 形式的 oozie cord 文件。

 ADD JAR $JSON_SERDE;

ALTER TABLE tweets ADD IF NOT EXISTS PARTITION (datehour $DATEHOUR) LOCATION '$PARTITION_PATH';

请参考 http://blog.cloudera.com/blog/2013/01/how-to-schedule-recurring-hadoop-jobs-with-apache-oozie/

【讨论】:

那么这个alter语句有什么作用呢?这是否意味着我需要将每天和每月的每个小时的分区一个一个地手动添加到表中? 它将分区添加到推文表中。在该更改语句中,您必须提供该分区的位置。推荐它-blog.zhengdong.me/2012/02/22/… 你应该通过 Oozie hive-action 来安排它。参考它...blog.cloudera.com/blog/2013/01/… 太棒了... Oozie 是我接下来要学习的。将尝试!谢谢!

以上是关于Hive 外部表未显示任何内容的主要内容,如果未能解决你的问题,请参考以下文章

Hive 外部表未显示在 Namenode (Cloudera-QuickstartVm) 中

镶木地板上的配置单元外部表未获取数据

即使存在与之关联的镶木地板文件,Hive 外部表也不显示任何数据

hive 内部表和外部表的区别

Hive常用命令

hive 四种表,分区表,内部,外部表,桶表