gpt4 book ai didi

hadoop - hive -分区表

转载 作者:行者123 更新时间:2023-12-02 21:14:58 26 4
gpt4 key购买 nike

我用查询创建了一个配置单元表-

create table studpart4(id int, name string) partitioned by (course string, year int) row format delimited fields terminated by '\t' lines terminated by '\n' stored as textfile;

创建成功。

使用以下命令加载数据-
load data local inpath '/scratch/hive_inputs/student_input_1.txt' overwrite into table studpart4 partition(course='cse',year=2);
我的输入数据文件看起来像-
 101    student1    cse 1

102 student2 cse 2

103 student3 eee 3

104 student4 eee 4

105 student5 cse 1

106 student6 cse 2

107 student7 eee 3

108 student8 eee 4

109 student9 cse 1

110 student10 cse 2

但是输出显示为( select * from studpart4)-
 101    student1    cse 2

102 student2 cse 2

103 student3 eee 2

104 student4 eee 2

105 student5 cse 2

106 student6 cse 2

107 student7 eee 2

108 student8 eee 2

109 student9 cse 2

110 student10 cse 2

为什么最后一列都是2。为什么更改和错误更新了它。

最佳答案

显示的结果正是您告诉Hive处理数据的结果。

在第一个命令中,您将创建一个分区表studpart4,该表包含两列idname,以及两个分区键courseyear(一旦创建,它们的行为就像常规列一样)。现在,在第二个命令中,您正在执行的操作是:

load data local inpath '/scratch/hive_inputs/student_input_1.txt' overwrite into table studpart4 partition(course='cse',year=2)

这基本上意味着“ 中的所有数据复制到表 student_input_1.txt中,并将 studpart4列的所有值设置为'cse',并将 course列的所有值设置为'2'”。在内部,Hive将创建一个目录结构,其中将包含您的分区键。您的数据将存储在这样的目录中:
.../studpart4/course=cse/year=2/

我怀疑您真正想要的是Hive来检测 year文件中 courseyear的列值并为您设置正确的值。为了执行此操作,您必须使用表的 dynamic partitioning并遵循将数据 .txt到外部表中的策略,然后使用 loading命令将数据存储到 INSERT OVERWRITE INTO TABLE表中。 BigDataLearner在评论中发布的链接描述了此策略。

我希望这有帮助。

关于hadoop - hive -分区表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39057380/

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