gpt4 book ai didi

hadoop - Hive 改变 serde 属性不起作用

转载 作者:可可西里 更新时间:2023-11-01 14:27:32 25 4
gpt4 key购买 nike

我正在尝试使用 Hive ALTER TABLE 语句将现有的 Hive 外部表分隔符从逗号 , 更改为 ctrl+A 字符

ALTER TABLE table_name SET SERDEPROPERTIES ('field.delim' = '\u0001');

在 DDL 之后我可以看到变化

show create table table_name

但是当我从Hive中select时,这些值都是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/'

最佳答案

分区表上的 ALTER TABLE 命令会更改 future 分区的默认设置。

但是它不会应用于现有分区,除非该特定命令支持CASCADE 选项——但是that's not the case对于 SET SERDEPROPERTIES;与 column management 比较例如

所以您必须使用这种命令更改每个现有分区

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

所以现在是时候运行 SHOW PARTITIONS,在输出上应用几个 RegEx 以生成命令列表,运行这些命令,然后一切顺利。

旁注:我可以告诉你,在 CASCADE 东西最终实现之前重命名列真的很痛苦...

关于hadoop - Hive 改变 serde 属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38852453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com