Impala聚合数据报错AnalysisException:无法解析transaction_nominal_value字段怎么办?
解决Impala中AnalysisException字段找不到的问题
问题根源
你收到的错误提示里提到的字段transaction_nominal_value,在你提供的SQL语句中根本没有出现——你的聚合查询用的是transaction_nominal_amount,这大概率是执行时的笔误,或者源表字段名发生了变更。
具体解决步骤
核对字段名一致性
- 如果是手误写错了字段名:把聚合查询里的
transaction_nominal_value改成transaction_nominal_amount即可(和你MMSR子查询中选取的字段保持一致)。 - 如果源表
datashop_store_business_mmsr.secured_vl_pq的字段已经从transaction_nominal_amount改名为transaction_nominal_value:需要同步修改MMSR子查询和聚合查询中的字段名,示例如下:
同时聚合查询改为:-- MMSR子查询修改 SELECT transaction_nominal_value, maturity_days, deal_rate, collateral_haircut, collateral_isin, collateral_nominal_amount, trade_date FROM datashop_store_business_mmsr.secured_vl_pq WHERE collateral_isin IS NOT NULLSELECT trade_date, AVG(transaction_nominal_value) FROM Final GROUP BY trade_date;
- 如果是手误写错了字段名:把聚合查询里的
*避免使用SELECT (推荐)
不要用SELECT *获取所有字段,明确指定需要的字段,能避免表结构变更或字段冲突带来的意外问题。修改Final子查询如下:Final AS ( SELECT MMSR.transaction_nominal_amount, MMSR.trade_date, MMSR.maturity_days, MMSR.deal_rate, MMSR.collateral_haircut, MMSR.collateral_isin, MMSR.collateral_nominal_amount, CSDB.isin, CSDB.nominal_currency, CSDB.amount_outstanding, CSDB.issue_price, CSDB.amount_issued, CSDB.yield, CSDB.original_maturity, CSDB.residual_maturity FROM MMSR LEFT JOIN CSDB ON MMSR.collateral_isin = CSDB.isin )验证表字段存在性
可以先执行以下语句确认源表的字段情况:DESCRIBE datashop_store_business_mmsr.secured_vl_pq;查看输出中是否存在
transaction_nominal_amount或transaction_nominal_value,确认字段名的正确性。
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

