Sql 创建配置单元表时,如何向使用serde创建的表中添加列? 表描述信息 apache日志格式序列化 使用ALTERQUERY添加列 hive>altertablelog23添加列(代码字符串); 失败:执行错误,从org.apache.hadoop.hive.ql.exec.ddlstask返回代码1。 错误:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:“

Sql 创建配置单元表时,如何向使用serde创建的表中添加列? 表描述信息 apache日志格式序列化 使用ALTERQUERY添加列 hive>altertablelog23添加列(代码字符串); 失败:执行错误,从org.apache.hadoop.hive.ql.exec.ddlstask返回代码1。 错误:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:派生自反序列化器:“,sql,hadoop,hive,Sql,Hadoop,Hive,添加列用于将新列添加到现有列的结尾,但在分区列之前。对于和更高版本,支持Avro的表也支持此功能 替换列删除所有现有列并添加新的列集。这只能对具有本机SerDe(DynamicSerDe、MetadataTypedColumnsetSerDe、LazySimpleSerDe和ColumnarSerDe)的表执行。有关更多信息,请参阅。替换列也可用于删除列。例如,“ALTER TABLE test_change REPLACE COLUMNS(a int,b int);”将从test_change

添加列用于将新列添加到现有列的结尾,但在分区列之前。对于和更高版本,支持Avro的表也支持此功能


替换列删除所有现有列并添加新的列集。这只能对具有本机SerDe(DynamicSerDe、MetadataTypedColumnsetSerDe、LazySimpleSerDe和ColumnarSerDe)的表执行。有关更多信息,请参阅。替换列也可用于删除列。例如,“ALTER TABLE test_change REPLACE COLUMNS(a int,b int);”将从test_change的架构中删除列“c”。

我尝试了相同的方法,但我能够创建一个表,并在末尾添加了列:

创建表log23(主机字符串、远程主机字符串); alter table log23添加列(代码字符串)


它正在使用文本文件格式。如果您使用不同的文件格式,请告诉我,以便我尝试复制使用。

不幸的是,如果您使用了serde,则无法添加列。这是一个众所周知的问题:

我可以很容易地使用beeline完成这项工作-

我试图用上面的答案替换它,但我得到了以下错误。失败:执行错误,从org.apache.hadoop.hive.ql.exec.ddlstask返回代码1。表default.log23不支持替换列。SerDe可能不兼容。我在创建表时应用了SerDe格式的apache日志格式。我可以在创建常规表而不是serde类型时添加列。请理解并回答您的问题:(
hive> desc log23;
OK
col_name        data_type       comment
17/05/25 10:49:12 INFO mapred.FileInputFormat: Total input files to process : 1
host                    string                  from deserializer
remote_host             string                  from deserializer
remote_logname          string                  from deserializer
remote_user             string                  from deserializer
request_time            string                  from deserializer
request_method          string                  from deserializer
request_url             string                  from deserializer
first_line              string                  from deserializer
http_status             string                  from deserializer
bytes                   string                  from deserializer
referer                 string                  from deserializer
agent                   string                  from deserializer
Time taken: 0.049 seconds, Fetched: 12 row(s)
serializationLib:org.apache.hadoop.hive.contrib.serde2.RegexSerDe, parameters:{output.format.string=%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s %10$s %11$s %12$s, serialization.format=1, input.regex=([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (-|\[[^\]]*\]) "(.[A-Z]*) (.*) (.*)" (-|[0-9]*) (-|[0-9]*) "(.*)" "(.*)"})
hive> alter table log23 add columns (code string);

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. 
Error: type expected at the position 0 of derived from deserializer:derived from deserializer:derived from deserializer:derived from deserializer:derived from deserializer:derived from deserializer:derived from deserializer:derived from deserializer:derived from deserializer:derived from deserializer:<derived from deserializer:derived from deserializer:string but>'<' is found.`