通过带有timestamp数据类型的hcatalog问题将hive与pig一起使用

bfrts1fy  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(411)

在我的设备箱里,我有 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 我还能继续吗?

dgjrabp2

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。

des4xlb0

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将导致时间戳丢失纳秒(转换为最接近的毫秒!)

w8biq8rn

w8biq8rn3#

根据您使用的hive、pig和hcatalog版本,不支持时间戳。也没有办法,你可以直接加载到Pig使用hcatalog从Hive。
如果您创建一个临时配置单元表并将数据类型从timestamp更改为string,则有一个解决方法。这样你就可以把它装到Pig身上了。一旦你在pig中加载了你的数据,你就可以打字了。

相关问题