hive alter serde属性不起作用

nwwlzxa7  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(335)

我正在尝试将现有的配置单元外部表分隔符从逗号改为逗号 ,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/'
tyg4sfes

tyg4sfes1#

ALTER TABLE 命令更改以后分区的默认设置。
但它不会应用于现有分区,除非该特定命令支持 CASCADE 选项--但这不是 SET SERDEPROPERTIES ; 例如与列管理比较
因此,必须使用这种命令更改每个现有分区

ALTER TABLE table_name PARTITION (ing_year=2016,ing_month=8,ing_day=31)
SET SERDEPROPERTIES ('field.delim' = '\u0001');

所以现在是时候让你做一个 SHOW PARTITIONS ,在输出上应用两个regex来生成命令列表,运行这些命令,然后从此快乐起来。
旁注:我可以告诉你,在 CASCADE 终于实现了。。。

pdsfdshx

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');

vwkv1x7d

vwkv1x7d3#

将此命令用于更改 SERDEPROPERTIES .

alter table airlinetestcsv 
SET SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde';

相关问题