我有一些日志数据,有字段
id、日期、信息
我创建了一个动态分区表
CREATE TABLE log_partitioned(id STRING, info STRING)
PARTITIONED BY ( tdate STRING)
然后我加载数据
FROM logs lg
INSERT OVERWRITE TABLE log_partitioned PARTITION(tdate)
SELECT lg.id, lg.info, lg.tdate
DISTRIBUTE BY tdate;
它通过动态分区成功地加载数据。但是当我试图在
hdfs dfs -cat /user/hive/warehouse/log_partitioned/tdate=2000-11-05/part-r-00000
只有两列值。
id1,信息1
id2,信息2。。。。
如果我们运行配置单元查询
select * from log_partitioned limit 10
它显示了所有三列。如果配置单元还将分区列存储在基础数据中,我应该怎么做?
1条答案
按热度按时间hgb9j2n61#
我相当肯定Hive在默认情况下根本不会这样做。您可以使用自定义serde和/或输入/输出格式来完成它,但这可能很棘手。问题是,任何人都可以将数据放在这些分区文件夹中,如果他们将包含该列错误值的数据放在这些分区文件夹中,hive将如何协调这些数据?
你的用例是什么?如果你在做
dfs -cat
你刚才说的命令,从你经过的路上看,时间不是很明显吗?如果您真的希望它出现在shell命令的输出中,那么如下所示:另一种可能的解决方法是将相同的数据存储在表的两列中。这样地: