【问题标题】:External table does not return the data in its folder外部表不返回其文件夹中的数据
【发布时间】:2014-09-10 07:24:47
【问题描述】:

我在 Hive 中创建了一个外部表,位于此位置:

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

数据存在于文件夹中,但是当我查询表时,它什么也没返回。该表的结构符合数据结构。

SELECT * FROM tb LIMIT 3;

Hive 表是否存在权限问题:特定用户是否有权查询某些表? 您知道一些解决方案或变通方法吗?

【问题讨论】:

    标签: hive external cloudera


    【解决方案1】:

    您已根据列 datehour 将表创建为 分区表,但您将数据放入 /user/cloudera/data . Hive 将在 /user/cloudera/data/datehour=(some int value) 中查找数据。由于它是一个外部表,hive 不会更新元存储。您需要运行一些 alter 语句来更新它

    下面是带分区的外部表的步骤:

    1.) 在您的外部位置 /user/cloudera/data,创建一个目录 datehour=0909201401

                                    OR
    

    使用加载数据:LOAD DATA [LOCAL] INPATH '/path/to/data/file' INTO TABLE partition(datehour=0909201401)

    2.) 创建表后运行 alter 语句: ALTER TABLE 添加分区 (datehour=0909201401)

    希望对你有帮助...!!!

    【讨论】:

    • 我知道这个问题被问到已经有一段时间了,但我又回来了。我在您的回答中没有得到一些东西:1_最初创建的分区表不再可用? 2_是否必须创建一个分区为 datehour=0909201401 的新表? 3_如果我没有数据要加载到新表中怎么办?提前感谢您,祝您有美好的一天。
    • 1.) 只有当您按照我提到的方式创建目录结构并运行 alter table 语句时,它才能使用。 2.) 不,您不必创建单独的表,同一张表就可以完成这项工作。 3.) 如果您没有要加载的数据,请不要创建分区。它会澄清你的疑惑吗?
    • 以上步骤我都做了。它有效。我是否正确地说目标是摆脱分区?谢谢。
    • 说摆脱分区是错误的。因为在您提到的问题中,您需要分区。如果需要,我仍然建议尝试使用分区。因为对于大数据,分区有它自己的优势。
    【解决方案2】:

    当我们使用 PARTITION 创建一个 EXTERNAL TABLE 时,我们必须使用给定分区的数据位置更改 EXTERNAL TABLE。但是,它不必与我们在创建 EXTERNAL TABLE 时指定的路径相同。

    hive> ALTER TABLE tb ADD PARTITION (datehour=0909201401)
    hive> LOCATION '/user/cloudera/data/somedatafor_datehour'
    hive> ;
    

    当我们在创建 EXTERNAL TABLE 时指定 LOCATION '/user/cloudera/data'(尽管它是可选的)时,我们可以利用对该表进行修复操作的一些优势。因此,当我们想通过诸如 ETL 之类的过程将文件复制到该目录中时,我们可以将分区与 EXTERNAL TABLE 同步,而不是编写 ALTER TABLE 语句来创建另一个新分区。

    如果我们已经知道 HIVE 将创建的分区的目录结构,我们可以简单地将数据文件放在该位置,例如“/user/cloudera/data/datehour=0909201401/data.txt”,然后运行语句为如下图:

    hive> MSCK REPAIR TABLE tb;  
    

    上述语句会将分区同步到表“tb”的配置单元元存储中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-14
      • 1970-01-01
      相关资源
      最近更新 更多