【问题标题】:How to cast complex datatype in hive如何在配置单元中强制转换复杂的数据类型
【发布时间】:2017-06-18 20:34:14
【问题描述】:

我在 hive 表中有一个复杂的数据类型列,它是结构,在结构内部我有十进制数据类型。当我对另一个表进行插入覆盖操作时,我想将此 struct(decimal(10,0)) 转换为 struct(double) 或 struct(float)。我该如何实现这一点,因为当我尝试它给我一个错误时-

 FAILED: SemanticException [Error 10044]: Line 1:23 Cannot insert into 
 target table because column number/types are different 'avro_poc_orc_test': Cannot convert column 3 from struct<latitude:decimal(28,2),longitude:decimal(19,3)> to struct<latitude:double,longitude:double>.

是否可以将复杂数据类型转换为另一个复杂数据类型?

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    在转换相关字段时从其组件构造结构

    演示

    with t as (select struct(cast (123 as decimal(10,0)),222,333,444) as s)
    
    select  struct(cast(t.s.col1 as double),t.s.col2,t.s.col3,t.s.col4) 
    from    t
    ;
    

    【讨论】:

    • 如果已经有一个struct数组,我需要把这个struct数组的每个小数元素都转换成float。在这种情况下怎么办?
    • @VishwanathSharma,这是一个不同的问题。接受此答案并在新帖子中打开一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2018-11-02
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    相关资源
    最近更新 更多