hadoop - 如何在Hive中将TEXT格式的分区表复制到ORC格式的表

标签 hadoop hive orc

我有一个文本格式配置单元表,例如: CREATE EXTERNAL TABLE op_log ( time string, debug string,app_id string,app_version string, ...more fields) PARTITIONED BY (dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
现在我用相同的字段创建一个兽人格式表,例如 CREATE TABLE op_log_orc ( time string, debug string,app_id string,app_version string, ...more fields) PARTITIONED BY (dt string) STORED AS ORC tblproperties ("orc.compress" = "SNAPPY");
当我从op_log复制到op_log_orc时,出现以下错误:
hive> insert into op_log_orc PARTITION(dt='2016-08-09') select * from op_log where dt='2016-08-09'; FAILED: SemanticException [Error 10044]: Line 1:12 Cannot insert into target table because column number/types are different ''2016-08-09'': Table insclause-0 has 62 columns, but query has 63 columns. hive>

最佳答案

源表中的分区键(dt)就像常规字段一样返回到结果集中,因此您有多余的列。如果要在分区键中指定其值,请从字段列表中排除dt字段(而不是*)。或者,只需将dt指定为分区的名称,而不提供值。请参见此处示例中的CTAS(将表创建为select ...):https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableAsSelect(CTAS)

关于hadoop - 如何在Hive中将TEXT格式的分区表复制到ORC格式的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38841409/

相关文章:

hadoop - 洗牌和排序阶段的输出路径

hadoop - 配置单元将数据从一个分区复制到另一个分区

java - 使用 hive 上下文的 Spark 作业在 oozie 中失败

hive - 有没有办法在不使用 ALTER TABLE CONCATENATE 命令的情况下在 HDFS 中合并 ORC 文件?

hadoop - 名称节点不工作

hadoop - 使用 map reduce 在 cassandra 中执行批量加载

hadoop - 将 PIG 中的一些字段存储到 Hbase 中

hadoop - 如何在hive-site.xml中映射Hive仓库路径?

sql - 如何通过比较两个字段并考虑性能来连接表

hadoop - 在HDFS上,我想显示以ORC格式存储的配置单元表的普通文本