3

在我的开发框中,我有MapR 3.0.2, Hive 0.11, HCatLog 0.4.1& Pig 0.12。我使用标准查询从( )HCatlog读取和写入Hive表,PigPig Latin

A = LOAD 'dbname.tablename' USING org.apache.hcatalog.pig.HCatLoader();

我的Hive表包含TIMTESTAMP数据类型(几列),因此在此语句之后立即GRUNT出现错误

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: Type timestamp not present

有一个类似的查询:类型转换猪 hcatalog

我无法更改Hive表的数据类型。此外,我无法将这些工具中的任何一个更改或升级到较新的版本(客户端策略约束)。如何将它转换为字符串或任何支持的数据类型,以便在&HCatalog之间传递它,我可以继续进一步?PigHive

4

3 回答 3

1

如果您使用的是 hive 0.13 或更高版本,而不是

A = LOAD 'dbname.tablename' USING org.apache.hcatalog.pig.HCatLoader();

A = LOAD 'dbname.tablename' USING org.apache.hive.hcatalog.pig.HCatLoader();

org.apache.hcatalog.pig.HCatLoader现在已弃用。新类支持 pig datetime 类型,并将适当地从 hive 转换。

但是请注意,使用 HCatLoader 时会丢失数据,因为它们以不同的方式表示时间,因为 pig datetime 将日期表示为毫秒精度,而 hive 表示为纳秒。

例如。Hive -> Pig 将导致从时间戳中丢失纳秒(转换为最接近的毫秒!)

于 2015-09-29T11:01:37.003 回答
0

根据您使用的 Hive、Pig 和 HCatalog 版本,不支持时间戳。而且您无法使用 Hive 中的 HCatalog 直接将其加载到 Pig 中。

如果您创建一个临时配置单元表并将数据类型从时间戳更改为字符串,则可以解决此问题。这样你就可以将它作为 chararray 加载到 Pig 中。在 Pig 中加载数据后,您可以随时对其进行类型转换。

于 2015-03-04T20:53:59.810 回答
0

它将在 hive 0.13 下得到支持,他们有一个关于这个问题的问题已经解决,你可以在 https://issues.apache.org/jira/browse/HIVE-5814中看到这个问题

org.apache.hcatalog.pig.HCatLoader 在 Hive 0.12 中已被弃用。事实上,org.apache.hcatalog 中的每个类都已被弃用。所有新功能都添加到 org.apache.hive.hcatalog 中,其中包含来自 org.apache.hcatalog 的所有类/方法和新 API。

于 2015-03-05T05:50:30.413 回答