有没有办法改变存储为ORC的hive表中的列?

时间:2016-11-30 08:01:03

标签: hive orc

一般来说,Hive已经存在一个问题( Is there a way to alter column type in hive table?)。这个问题的答案表明可以使用alter table change命令

更改模式

但是,如果文件存储为ORC,这也可以吗?

2 个答案:

答案 0 :(得分:0)

我在ORC表上运行测试。可以将字符串转换为浮点列。

ALTER TABLE test_orc CHANGE third_column third_column float;

会将名为third_column的列(标记为字符串列)转换为float列。也可以更改列的名称。

旁注:如果对ORC的其他改动可能会产生问题,我很好奇。当我试图重新排序列时,我遇到了异常。

ALTER TABLE test_orc CHANGE third_column third_column float AFTER first_column;

例外是:FAILED:执行错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1。表default.test_orc不支持重新排序列。 SerDe可能不兼容。

答案 1 :(得分:0)

您可以将orc文件加载到pyspark:

  1. 将数据加载到数据框中:

    df = spark.read.format("orc").load("<path-of-file-in-hdfs")
    
  2. 在数据框上创建视图:

    df2 = df.createOrReplaceTempView('Table')
    
  3. 使用可操纵的列创建新的数据框:

    df3 = spark.sql("select *, cast(third_column as float) as third_column,  from Table")
    
  4. 将数据帧保存到hdfs:

    df3.write.format("orc").save("<hdfs-path-where-file-needs-to-be-saved")