hive-0.11错误

安装hive-0.11,执行ql,报如下错误:

2013-08-09 10:23:08,854 ERROR metastore.RetryingHMSHandler (RetryingHMSHandler.java:invoke(134)) - NoSuchObjectException(message:partition values=[2013-08-03])
        at org.apache.hadoop.hive.metastore.ObjectStore.getPartitionWithAuth(ObjectStore.java:1424)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.hive.metastore.RetryingRawStore.invoke(RetryingRawStore.java:111)
        at com.sun.proxy.$Proxy8.getPartitionWithAuth(Unknown Source)
        at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.get_partition_with_auth(HiveMetaStore.java:2014)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.hive.metastore.RetryingHMSHandler.invoke(RetryingHMSHandler.java:102)
        at com.sun.proxy.$Proxy9.get_partition_with_auth(Unknown Source)
        at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.getPartitionWithAuthInfo(HiveMetaStoreClient.java:822)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.invoke(RetryingMetaStoreClient.java:74)
        at com.sun.proxy.$Proxy10.getPartitionWithAuthInfo(Unknown Source)
        at org.apache.hadoop.hive.ql.metadata.Hive.getPartition(Hive.java:1580)
        at org.apache.hadoop.hive.ql.metadata.Hive.getPartition(Hive.java:1543)
                                                                                                               


原因:

hive目前的bug  <.._..>!

解决方案:暂无

<think>嗯,用户需要了解Hive中decimal类型的使用指南。根据之前的引用内容,我已经掌握了decimal类型的基本概念和版本差异,现在需要系统性地整理使用要点。 用户可能正在处理财务数据或精确计算场景,因为decimal通常用于需要高精度计算的领域。考虑到Hive版本差异较大,首先要明确不同版本的关键区别:0.13之前固定38位精度,之后支持自定义精度和比例。这个点必须前置说明,避免用户踩坑。 关于使用指南,应该从定义方式切入。引用[1]提到未指定精度时默认decimal(10,0),引用[2]则强调Hive与MySQL定义方式的差异——这点很重要,很多用户会混淆。需要举例说明CREATE TABLE时的三种定义变体:完全默认、只指定precision、完整指定precision和scale。 计算特性部分要突出Java BigDecimal的不可变性,所有运算都会返回新对象。这里可以关联到UDF支持情况,常规数学函数和UDF都能无缝处理decimal,但要注意隐式转换规则。特别是整数除法容易出错的问题,必须单独提醒。 存储格式方面,科学计数法和普通数字的兼容性需要说明,不过用户更关心的是实际存储效率。decimal的存储空间比float大但精度有保障,这个权衡要讲清楚。另外外部数据导入时的格式兼容问题也很关键,比如文本文件中可以混合使用两种表示法。 最后是避坑指南。根据引用[2],Hive的m-n整数位定义与MySQL不同,这点必须用对比表格强调。还要补充实际案例,比如精算场景中9位小数位不足时的解决方案。性能建议部分需要说明精度设置过高的代价,以及比较运算的优化策略。 相关问题的设计要覆盖用户可能的后续需求:精度调整、计算优化、异常处理都是常见痛点。特别是版本迁移问题,很多用户会从旧版升级到0.13+,需要特别关注精度定义方式变化带来的影响。</think>以下是 Hive `DECIMAL` 类型的使用指南,结合关键特性和注意事项: --- ### **一、定义与语法** 1. **基本格式** ```sql DECIMAL(precision, scale) -- 显式定义精度和小数位 DECIMAL -- 隐式定义,等价于 DECIMAL(10,0) ``` - **precision**:总位数(1-38),包含整数位和小数位。 - **scale**:小数位数(0 ≤ scale ≤ precision)。 2. **示例** ```sql CREATE TABLE financial_data ( amount DECIMAL, -- 默认 DECIMAL(10,0),即整数 interest DECIMAL(10,4) -- 总位数10,小数位4(整数位6位) ); ``` --- ### **二、核心特性** 1. **高精度计算** 基于 Java `BigDecimal`,支持精确的加减乘除运算,避免浮点数误差。 **示例**: ```sql SELECT 0.1 * 3; -- 浮点结果:0.30000000000000004 SELECT CAST(0.1 AS DECIMAL(10,2)) * 3; -- 精确结果:0.30 ``` 2. **运算兼容性** 支持所有数学 UDF(如 `ROUND()`、`FLOOR()`)和运算符(`+`, `-`, `*`, `/`)。 3. **存储格式灵活** 兼容科学计数法(`4.004E+3`)和普通数字(`4004`),写入/读取时自动转换[^1]。 --- ### **三、版本差异** | **Hive 版本** | **行为** | |---------------|----------| | **0.11-0.12** | 固定精度 38 位,小数位需通过 `CAST` 调整 | | **0.13+** | 支持自定义精度(`DECIMAL(p,s)`) | --- ### **四、使用场景与技巧** 1. **财务计算** 需精确小数位的场景(如利息、税率): ```sql -- 计算含税金额(税率5.5%) SELECT price * CAST(1.055 AS DECIMAL(10,3)) FROM sales; ``` 2. **避免整数除法截断** 显式转换为 `DECIMAL` 再运算: ```sql SELECT revenue / CAST(quantity AS DECIMAL(10,2)) -- 保留小数结果 FROM transactions; ``` 3. **精度与存储优化** - **最小化精度**:`DECIMAL(5,2)` 比 `DECIMAL(38,2)` 存储效率更高。 - **避免过度精度**:过大的精度会降低计算性能。 --- ### **五、常见误区** 1. **与 MySQL 的区别** Hive 中 `DECIMAL(m,n)` 的整数位是 **`m-n`** 位(如 `DECIMAL(9,3)` → 整数位6位),而 MySQL 的 `DECIMAL(m,n)` 整数位是 **`m`** 位[^2]。 2. **隐式转换风险** 混合 `DECIMAL` 与浮点数时,Hive 可能隐式转为 `DOUBLE` 导致精度丢失: ```sql -- 错误示例(丢失精度) SELECT amount * 1.05 FROM accounts; -- 正确做法(显式转换) SELECT amount * CAST(1.05 AS DECIMAL(10,2)) FROM accounts; ``` 3. **溢出处理** 超过定义精度的计算会返回 `NULL` 并警告: ```sql SELECT CAST(999 AS DECIMAL(3,0)) * 2; -- 溢出,返回NULL ``` --- ### **六、最佳实践** 1. **明确指定精度** 始终显式定义 `DECIMAL(p,s)`,避免依赖默认值(`DECIMAL(10,0)`)。 2. **ETL 数据清洗** 导入文本数据时,确保字符串格式兼容 `DECIMAL`(如 `"123.45"` 或 `"1.234E2"`)。 3. **比较运算优化** 对 `DECIMAL` 列创建分区或分桶可加速 `WHERE` 条件过滤。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值