0

我正在尝试将 Pig BigDecimal 转换为 Hive Decimal 类型,但值被设置为 null。这是示例代码:

猪脚本:

    a = LOAD 'test.txt' using TextLoader() as (col1:chararray,col2:int,col3:chararray,col4:int);
    b = foreach a generate *,1 as rec_cnt;
    c = group b by col1,col3;
    d = foreach c generate flatten(group),(bigdecimal) SUM(rec_cnt) as grp_code;
STORE d into 'user/test' Using PigStorage(',');
STORE d into 'default.test' using org.apache.hive.hcatalog.pig.HCatStorer();

在上面的代码中,记录计数的总和值正确地出现在存储为“用户/测试”的 HDFS 文件中。但是使用 HcatStorer,所有记录的相同字段都填充为 NULL。使用此列定义 DECIMAL(16,0) 创建测试表。我正在使用 Hive 1.1.0。请建议如何解决此问题。

4

1 回答 1

0

我终于弄清楚了null的原因。Hcatalog 在将 pig 中的 bigdecimal 转换为 hive 中的 Decimal 时会进行范围检查。由于 Hive 定义中没有刻度(即 DECIMAL (16,0)),因此在存储时范围检查期间默认为 null。当我将 Hive 定义更改为 DECIMAL(16,2) 时,它会正确存储。因此,这需要更改布局以确保更新比例。

于 2016-01-08T23:23:01.217 回答