Hive alter serde properties not working
我正在尝试使用 Hive ALTER TABLE 语句将现有的 Hive 外部表分隔符从逗号
1 | ALTER TABLE table_name SET SERDEPROPERTIES ('field.delim' = '\\u0001'); |
在 DDL 之后我可以看到变化
1 | show create table table_name |
但是当我从 Hive 中选择时,这些值都是 NULL(HDFS 中的基础文件更改为具有 ctrl 分隔符)。
我也使用 msck 修复了表。
查看数据的唯一方法是删除并重新创建外部表,谁能帮我理解原因。
表格语法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 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 '\
'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://location/'
分区表上的
但它不适用于现有分区,除非该特定命令支持
的列管理进行比较
所以你必须用这种命令来改变每个现有的分区
1 2 | ALTER TABLE table_name PARTITION (ing_year=2016,ing_month=8,ing_day=31) SET SERDEPROPERTIES ('field.delim' = '\\u0001'); |
所以现在是时候运行
旁注:我可以告诉你,在
您不能更改外部表的 SERDER 属性。
您可以做的是删除表和外部源之间的链接。
例如,如果是 Hbase 表,您可以执行以下操作:
1) ALTER TABLE MY_HIVE_TABLE SET TBLPROPERTIES('hbase.table.name'='MY_HBASE_NOT_EXISTING_TABLE')
MY_HBASE_NOT_EXISTING_TABLE 必须是不存在的表。
2) 删除表 MY_HIVE_TABLE;
3) 通过指定新的 SERDE 属性重新创建配置单元表
创建外部表 MY_HIVE_TABLE(
MY_colums
)
行格式SERDE
"……"
具有SERDE属性(
...)
TBL 属性 (
'hbase.table.name'='z_app_qos_hbase_temp:MY_HBASE_GOOD_TABLE');
将此命令用于更改
1 2 | alter table airlinetestcsv SET SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'; |