我正在尝试将现有的配置单元外部表分隔符从逗号改为逗号 ,
至 ctrl+A
使用配置单元alter table语句生成字符
ALTER TABLE table_name SET SERDEPROPERTIES ('field.delim' = '\u0001');
在ddl之后我可以看到变化
show create table table_name
但是当我从配置单元中选择时,这些值都是null(hdfs中的底层文件被更改为具有ctrl+a分隔符)。
我也用msck修复了这个表。
查看数据的唯一方法是删除并重新创建外部表,请任何人帮助我了解原因。
表语法:
CREATE EXTERNAL TABLE `table_name`(
col1,
col2,
col3)
PARTITIONED BY (
`ing_year` int,
`ing_month` int,
`ing_day` int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://location/'
3条答案
按热度按时间tyg4sfes1#
一
ALTER TABLE
命令更改以后分区的默认设置。但它不会应用于现有分区,除非该特定命令支持
CASCADE
选项--但这不是SET SERDEPROPERTIES
; 例如与列管理比较因此,必须使用这种命令更改每个现有分区
所以现在是时候让你做一个
SHOW PARTITIONS
,在输出上应用两个regex来生成命令列表,运行这些命令,然后从此快乐起来。旁注:我可以告诉你,在
CASCADE
终于实现了。。。pdsfdshx2#
不能更改外部表的serder属性。您可以做的是删除表和外部源之间的链接。例如,如果是hbase表,则可以执行以下操作:1)alter table my\u hive\u table set tblproperties('hbase.table.name'='my\u hbase\u not\u existing\u table')my\u hbase\u not\u existing\u table必须是nott existing表。2) 放下table我的Hivetable;3) 通过指定新的serde属性重新创建配置单元表create external table my\u hive\u table(my\u columns)row format serde“…”with serdeproperties(…)tblproperty('hbase.table.name'='z\u app\u qos\u hbase_temp:my_hbase_good_table');
vwkv1x7d3#
将此命令用于更改
SERDEPROPERTIES
.