在我的设备箱里,我有 MapR 3.0.2
, Hive 0.11
, HCatLog 0.4.1
& Pig 0.12
. 我正在使用 HCatlog
读写 Hive
表来自 Pig
( Pig 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
在:type conversion pig hcatalog中有一个类似的查询。
我无法更改的数据类型 Hive
table。此外,我无法将这些工具中的任何一个更改或升级到较新的版本(客户端策略约束)。如何将其转换为字符串或任何受支持的数据类型,以便 HCatalog
把它传给 Pig
& Hive
我还能继续吗?
3条答案
按热度按时间dgjrabp21#
它将在hive0.13下得到支持,他们有一个关于这个问题的问题已经解决了,您可以在中看到这个问题https://issues.apache.org/jira/browse/hive-5814
在Hive0.12中,org.apache.hcatalog.pig.hcatloader已被弃用。事实上,org.apache.hcatalog中的每个类都被弃用了。所有新特性都添加到org.apache.hive.hcatalog中,其中包含org.apache.hcatalog中的所有类/方法和新的API。
des4xlb02#
如果您使用的是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类型,并将适当地从配置单元转换。但是,请注意,使用hcatloader时会丢失数据,因为它们以不同的方式表示时间,因为pig datetime以毫秒的精度表示日期,hive以纳秒的精度表示日期。
例如,hive->pig将导致时间戳丢失纳秒(转换为最接近的毫秒!)
w8biq8rn3#
根据您使用的hive、pig和hcatalog版本,不支持时间戳。也没有办法,你可以直接加载到Pig使用hcatalog从Hive。
如果您创建一个临时配置单元表并将数据类型从timestamp更改为string,则有一个解决方法。这样你就可以把它装到Pig身上了。一旦你在pig中加载了你的数据,你就可以打字了。