如何从一个作为时间戳接受的字符串在猪中创建一个时间戳字段?
我已经格式化了pig中的字符串,以匹配hive中的时间戳格式,但是加载后它是空的,而不是显示日期。
2014-04-10 09:45:56这是猪的格式,这是与蜂巢时间戳相匹配的格式,但不能加载。(只有当我加载到string字段时)
知道为什么吗?
快速更新:没有hcatalog可用。
问题是,在某些情况下,时间戳字段包含空值,当使用时间戳数据类型时,所有字段都变为空。当将时间戳放置到所有行都采用上述格式的列时,它可以正常工作。所以真正的问题是如何处理空值。
发布于 2014-04-16 16:11:21
我怀疑您已经使用PigStorage将数据写入HDFS,并且希望将其加载到Hive表中。问题是缺少的元组字段将由Pig编写为null,而Hive 0.11将将其视为null。到目前一切尚好。但是,所有后续字段都将被视为null,但是它们可以具有不同的值。蜂箱0.12没有这个问题。
根据SerDe类型,Hive可以将不同的字符串解释为null。如果是LazySimpleSerDe,则是\N。
你有两个选择:
\N存储在Pig中用于空字段例如:
鉴于以Pig 0.11为单位的下列数据:
A = load 'data' as (txt:chararray, ts:chararray);
dump A;
(a,2014-04-10 09:45:56)
(b,2014-04-11 10:45:56)
(,)
(e,2014-04-12 11:45:56)备选案文1:
store A into '/user/data';蜂箱0.11:
CREATE EXTERNAL TABLE test (txt string, tms TimeStamp)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION '/user/data';
alter table test SET SERDEPROPERTIES('serialization.null.format' = '');备选案文2:
...
B = foreach A generate txt, (ts is null?'\\N':ts);
store B into '/user/data'; 然后在没有设置serde属性的情况下在Hive中创建表。
https://stackoverflow.com/questions/22986388
复制相似问题