Hadoop 是否可以在同一HDFS目录结构中表示多个配置单元表?

Hadoop 是否可以在同一HDFS目录结构中表示多个配置单元表?,hadoop,hive,hdfs,Hadoop,Hive,Hdfs,是否可以在同一HDFS目录结构中表示多个配置单元表?换句话说,有没有办法让多个配置单元表指向相同/重叠的HDFS路径 以下是我的情况: 我有一个名为“mytable”的表,位于hdfs:/tables/mytable中 CREATE EXTERNAL TABLE mytable ( id int, ... [a whole bunch of columns] ... PARTITIONED BY (logname STRING) STORED AS [I-do-not-know-what-jus

是否可以在同一HDFS目录结构中表示多个配置单元表?换句话说,有没有办法让多个配置单元表指向相同/重叠的HDFS路径

以下是我的情况:

我有一个名为“mytable”的表,位于hdfs:/tables/mytable中

CREATE EXTERNAL TABLE mytable
(
id int,
...
[a whole bunch of columns]
...
PARTITIONED BY (logname STRING)
STORED AS [I-do-not-know-what-just-yet]
LOCATION 'hdfs:/tables/mytable';
因此,HDF看起来像:

hdfs:/tables/mytable/logname=tarzan/....
hdfs:/tables/mytable/logname=jane/....
hdfs:/tables/mytable/logname=whoa/....
是否可以在hdfs:/tables/mytable/logname=tarzan中有一个名为“tarzan”的配置单元表?与位于hdfs:/tables/mytable/logname=jane等中的配置单元表“jane”相同

tarzan、jane、whoa等子表共享一些列(时间戳、ip地址、国家/地区、用户id和其他一些列),但也会有许多它们没有共同点的列

有没有一种方法可以将这些数据一次性存储在HDFS中,并将其用于我上面描述的多个表?此外,有没有一种方法可以有效地存储数据,因为许多表都有不通用的列?像RCFILE或拼花地板这样的文件格式在这种情况下有效吗


非常感谢任何人提供的任何提示或帮助,

是的,您可以将多个表指向HDFS上的同一位置。但是,配置单元不支持动态列

有没有理由不能只拥有3张不同的桌子?这将允许您对每种模式都有不同的模式(列)


--布兰登回答我自己的问题:

可以用相同的HDFS目录结构表示多个配置单元表,但我希望做的是:

  • 由logname(logname=tarzan、logname=jane等)分区的mytable表
  • 每个日志名都有一个单独的表:一个“tarzan”表,只有tarzan表使用的列,没有任何其他日志名,与“jane”表相同,等等
  • 仅在HDFS中表示一次数据

  • 更好的解决方案是使用1 mytable表,按logname分区,并为每个logname表创建视图,每个表中只需要列的子集。

    是的,我们可以使用相同的底层HDFS目录创建多个配置单元表

    例如:

  • 创建表
    emp
    并将数据文件
    file3
    加载到其中

    create table emp (id int, name string, salary int) 
    row format delimited 
    fields terminated by ','  
    -- default location would be used
    
    load data 
    local inpath '/home/parv/testfiles/file3' 
    into table emp; 
    
  • 创建另一个表
    镜像
    。当您从
    mirror
    表中选择数据时,它将与
    emp
    表(文件3的内容)的数据相同

  • 将数据加载到镜像表中。当您从
    mirror
    表或
    emp
    表中选择数据时,它将返回相同的结果(文件3和文件4的内容)

  • 结论:

  • 在两个表
    emp
    mirror
    之间共享相同的数据文件
  • 但是,奇怪的是,HDFS文件系统只显示
    emp
    表的数据目录,而不显示
    mirror
    表的数据目录。但是,这两个表都存在于配置单元中,因此可以进行查询
  • create table mirror (id int, name string, salary int) 
    row format delimited 
    fields terminated by ',' 
    location 'hdfs:///user/hive/warehouse/parv.db/base';
    
    load data 
    local inpath '/home/parv/testfiles/file4' 
    into table mirror;