Hadoop - 从 HDFS 中的多个目录创建外部表

标签 hadoop hive hdfs partitioning external-tables

我有一个外部表,它从 HDFS 位置 (/user/hive/warehouse/tableX) 所有文件读取数据,并在 Hive 中创建了一个外部表。

现在,我们假设有一些数据的预先分区,并且所有以前的文件都被分配到几个具有特定名称约定的目录中 <dir_name>_<incNumber> 例如

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

如何创建另一个外部表来跟踪拆分文件夹中的所有文件?

我是否需要创建一个在每个子文件夹 (dir_x) 上分区的外部表?

此外,是否需要某种可以为每个子目录创建/添加分区的 Hive 或 shell 脚本?

最佳答案

您必须创建一个由 dir_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_100)添加到配置单元仓库路径,您将不得不删除并重新创建 sample_table 并使用 ALTER TABLE 再次将所有分区重新添加到 sample_table陈述。我已经有 10 个月没有使用 hive 了,所以我不确定是否有更好的方法。如果这不是问题,您可以使用这种方法。

关于Hadoop - 从 HDFS 中的多个目录创建外部表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37578495/

相关文章:

csv - 如何使用Apache Pig处理以多行,多行* .csv文件形式给出的多元时间序列?

java - 通过汇总警告来调试Pig UDF

hadoop - 损坏的 Parquet 文件

hadoop - 如何连接到hbase?

hadoop - HDFS审核日志格式和说明

hadoop - Hive转HBase的问题

java - HIVE:NoSuchMethodError:org.fusesource.jansi.internal.Kernel32.GetConsoleOutputCP()I

mysql与hive连接错误

hadoop - 通过HDFS Sink将带有水槽的事件写入S3以确保事务

python - 如何使用 Pandas/Python 查询 HDF 存储