hadoop-从hdfs中的多个目录创建外部表

gdrx4gfi  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(446)

我有一个外部表,它从hdfs位置(/user/hive/warehouse/tablex)读取所有文件的数据,并在hive中创建了一个外部表。
现在,让我们假设对数据进行了一些预分区,并且所有以前的文件都以特定的名称约定存放在多个目录中。

/user/hive/warehouse/split/
  ./dir_1/files...
  ./dir_2/files...
  ./dir_n/files...

如何创建另一个外部表来跟踪拆分文件夹中的所有文件?
我是否需要创建一个在每个子文件夹(dir\u x)上分区的外部表?
同样,是否需要某种可以为每个子目录创建/添加分区的配置单元或shell脚本?

holgip5t

holgip5t1#

要访问多个文件夹中的所有文件,必须创建一个按dir\u x分区的外部表。

CREATE external TABLE sample_table( col1 string,
                                    col2 string,
                                    col3 string,
                                    col4 string)
PARTITIONED BY (dir string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/user/hive/warehouse/split';

然后像添加常规分区表一样添加分区

ALTER TABLE sample_table ADD PARTITION(dir='dir_1')
LOCATION '/user/hive/warehouse/split/dir_1';
ALTER TABLE sample_table ADD PARTITION(dir='dir_2')
LOCATION '/user/hive/warehouse/split/dir_2';

这种方法会奏效。这种方法有一个问题。如果将来某个时候您决定向配置单元仓库路径添加一个新文件夹(例如dir\u 100),则必须删除并重新创建sample\u表,然后使用alter table语句再次将所有分区添加到sample\u表中。我已经有10个月没有使用Hive了,所以我不确定是否有更好的方法。如果这不是问题,您可以使用这种方法。

mitkmikd

mitkmikd2#

一旦您准备好了外部表,并且知道了配置单元将创建的分区结构。您可以通过一些过程将数据文件(加载到预先分区的文件夹)加载到驱动器中。一旦预分区文件可用(根据hive-known分区结构),就可以按如下所示修复表。

hive> MSCK REPAIR TABLE sample_table;

上面的语句将自动将所有现有分区同步到现有外部表“sample\u table”的配置单元元存储。

相关问题