Hive 将多个分区的 HDFS 文件加载到 table
Hive load multiple partitioned HDFS file to table
我在 HDFS 中有一些具有以下结构的二次分区文件:
/user/hive/warehouse/datascience.db/simulations/datekey=20210506/coeff=0.5/data.parquet
/user/hive/warehouse/datascience.db/simulations/datekey=20210506/coeff=0.75/data.parquet
/user/hive/warehouse/datascience.db/simulations/datekey=20210506/coeff=1.0/data.parquet
/user/hive/warehouse/datascience.db/simulations/datekey=20210507/coeff=0.5/data.parquet
/user/hive/warehouse/datascience.db/simulations/datekey=20210507/coeff=0.75/data.parquet
/user/hive/warehouse/datascience.db/simulations/datekey=20210507/coeff=1.0/data.parquet
并希望尽可能优雅地将它们加载到配置单元 table 中。我知道这种情况的典型解决方案是首先将所有数据加载到非分区 table,然后使用提到的动态分区将所有数据传输到最终 table here
但是,我的文件在实际数据中没有 datekey 和 coeff 值,它只在文件名中,因为它是这样分区的。那么当我将它们加载到中间值时,我将如何跟踪这些值 table?
一种解决方法是对每个 coeff 值和 datekey 进行单独的 load data inpath
查询。这不需要中间 table,但会很麻烦,而且可能不是最优的。
有没有更好的方法来做到这一点?
典型的解决方案是在 hdfs 目录之上构建外部分区 table:
create external table table_name (
column1 datatype,
column2 datatype,
...
columnN datatype
)
partitioned by (datekey int,
coeff float)
STORED AS PARQUET
LOCATION '/user/hive/warehouse/datascience.db/simulations'
之后,恢复所有分区,此命令将扫描 table 位置并在 Hive 元数据中创建分区:
MSCK REPAIR TABLE table_name;
现在您可以查询 table 列和分区列,并随心所欲地使用它:按原样使用,或使用 insert .. select 加载到另一个 table 中。 . 等:
select
column1,
column2,
...
columnN,
--partition columns
datekey,
coeff
from table_name
where datekey = 20210506
;
我在 HDFS 中有一些具有以下结构的二次分区文件:
/user/hive/warehouse/datascience.db/simulations/datekey=20210506/coeff=0.5/data.parquet
/user/hive/warehouse/datascience.db/simulations/datekey=20210506/coeff=0.75/data.parquet
/user/hive/warehouse/datascience.db/simulations/datekey=20210506/coeff=1.0/data.parquet
/user/hive/warehouse/datascience.db/simulations/datekey=20210507/coeff=0.5/data.parquet
/user/hive/warehouse/datascience.db/simulations/datekey=20210507/coeff=0.75/data.parquet
/user/hive/warehouse/datascience.db/simulations/datekey=20210507/coeff=1.0/data.parquet
并希望尽可能优雅地将它们加载到配置单元 table 中。我知道这种情况的典型解决方案是首先将所有数据加载到非分区 table,然后使用提到的动态分区将所有数据传输到最终 table here
但是,我的文件在实际数据中没有 datekey 和 coeff 值,它只在文件名中,因为它是这样分区的。那么当我将它们加载到中间值时,我将如何跟踪这些值 table?
一种解决方法是对每个 coeff 值和 datekey 进行单独的 load data inpath
查询。这不需要中间 table,但会很麻烦,而且可能不是最优的。
有没有更好的方法来做到这一点?
典型的解决方案是在 hdfs 目录之上构建外部分区 table:
create external table table_name (
column1 datatype,
column2 datatype,
...
columnN datatype
)
partitioned by (datekey int,
coeff float)
STORED AS PARQUET
LOCATION '/user/hive/warehouse/datascience.db/simulations'
之后,恢复所有分区,此命令将扫描 table 位置并在 Hive 元数据中创建分区:
MSCK REPAIR TABLE table_name;
现在您可以查询 table 列和分区列,并随心所欲地使用它:按原样使用,或使用 insert .. select 加载到另一个 table 中。 . 等:
select
column1,
column2,
...
columnN,
--partition columns
datekey,
coeff
from table_name
where datekey = 20210506
;