我在HDFS上具有以下格式的数据:
/basedir/yyyymmdd/fixedname/files
其中yyyymmdd是日期文件夹,而files是添加到目录中的文件列表。我需要一个配置单元中的表来从yyyymmdd / fixedname目录中提取数据。当我添加新日期时,这也应该起作用。例如,我在2013年3月5日添加了一些内容,因此当天添加的所有文件都将转到20130305 / fixedname文件夹。2013年3月6日,所有文件都将转到20130306 / fixedname文件夹。
我如何更改配置单元表以从更改日期但在其中的固定文件夹中获取数据?
您有分区表吗?假设您已经有一个按列日期划分的表,并且想要添加新数据。在这种情况下,您将必须将数据添加到新目录中,并使用ALTER TABLE ADD PARTITION COMMAND告诉配置单元表(特别是对metastore)它具有新分区。
假设您尚未创建任何表。在这种情况下,您将必须创建一个分区表,然后将查询中的数据插入该表中。当您设置以下两个标志时,魔术就出现了:
set hive.exec.dynamic.partition=yes
set hive.exec.dynamic.partition.mode = nonstrict;
这些标志允许动态分区(有关更多详细信息,请参见此处)。
请记住,您将拥有以下目录:
/date=YYYYMMDD/fixedname/files
因此,您必须告诉Hive以递归的方式将所有数据提取到子目录中。您应该设置以下标志(这里有一个更好的解释)
SET mapred.input.dir.recursive=true;
最后,您将能够按日期进行查询,并从查询中指定的日期(/ date = YYYYMMDD / ...)获取子目录中的所有数据。
希望这对您有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句