请问flink写hive,按小时分区,如果某个小时内一条数据都没有,那该小时对应的hdfs的目录路径会产生吗?
如果某个小时内没有数据,则对应的HDFS目录路径不会被创建。只有在有数据写入时,才会自动创建对应的目录路径。这是因为Flink写Hive时,是通过Hive的分区机制来实现按小时分区的,而Hive分区的目录是在数据写入时自动创建的。如果某个小时没有数据写入,则对应的分区目录也不会被创建。
如果某个小时内没有数据,那么根据你的flink代码生成的Hive表的按小时分区的定义,对应的HDFS目录路径是不会被创建的。这时候,通过查询Hive表,也是无法获取到该小时的数据的。
在生成Hive表的DDL语句中,可以添加如下语句,让空分区的目录路径也被创建出来。
TBLPROPERTIES("hive.exec.dynamic.partition"="true",
"hive.exec.dynamic.partition.mode"="nonstrict",
"hive.exec.max.dynamic.partitions"="100000",
"hive.exec.max.dynamic.partitions.pernode"="100000",
"hive.exec.max.created.files"="100000",
"hive.error.on.empty.partition"="false")
其中,"hive.error.on.empty.partition"="false"指定了当分区数据为空时,不抛出错误,而是创建空目录。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。