首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从猪创建蜂巢时间戳

问从猪创建蜂巢时间戳
EN

Stack Overflow用户
提问于 2014-04-10 11:11:43
回答 1查看 1.6K关注 0票数 0

如何从一个作为时间戳接受的字符串在猪中创建一个时间戳字段?

我已经格式化了pig中的字符串,以匹配hive中的时间戳格式,但是加载后它是空的,而不是显示日期。

2014-04-10 09:45:56这是猪的格式,这是与蜂巢时间戳相匹配的格式,但不能加载。(只有当我加载到string字段时)

知道为什么吗?

快速更新:没有hcatalog可用。

问题是,在某些情况下,时间戳字段包含空值,当使用时间戳数据类型时,所有字段都变为空。当将时间戳放置到所有行都采用上述格式的列时,它可以正常工作。所以真正的问题是如何处理空值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-16 16:11:21

我怀疑您已经使用PigStorage将数据写入HDFS,并且希望将其加载到Hive表中。问题是缺少的元组字段将由Pig编写为null,而Hive 0.11将将其视为null。到目前一切尚好。但是,所有后续字段都将被视为null,但是它们可以具有不同的值。蜂箱0.12没有这个问题。

根据SerDe类型,Hive可以将不同的字符串解释为null。如果是LazySimpleSerDe,则是\N。

你有两个选择:

  • 将表的空格式属性设置为Pig生成的空字符串
  • 或者将\N存储在Pig中用于空字段

例如:

鉴于以Pig 0.11为单位的下列数据:

代码语言:javascript
复制
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:

代码语言:javascript
复制
store A into '/user/data';

蜂箱0.11:

代码语言:javascript
复制
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:

代码语言:javascript
复制
...
B = foreach A generate txt, (ts is null?'\\N':ts);
store B into '/user/data'; 

然后在没有设置serde属性的情况下在Hive中创建表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22986388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档