gpt4 book ai didi

hadoop - 如果我们已经有一些数据,则更新分区的配置单元表

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

我有一个按天分区的配置单元表,与 03-02-2017 相关的数据已加载到其中,但第二天我有与 03-03-2017 相关的数据。现在如何用我的新数据更新 Hive 表,以便我的 Hive 仓库目录应该如下所示

hive/warehouse/sample_database/sample_table/day=03-02-2017/data_part_0000
hive/warehouse/sample_database/sample_table/day=03-03-2017/data_part_0000

所以请提供创建表的代码以及添加新数据集时如何更新表。

最佳答案

这是一个完整的演示,描述了 2 个基本选项:

  1. 向表中添加分区。 HDFS 目录将自动创建。
  2. 将目录添加到 HDFS 并对表应用msck 修复以添加分区。

请注意,我为分区使用了 DATE 类型。
日期文字的 ANSI/ISO 表示法是date 'YYYY-MM-DD'

即使对于不支持 DATE 类型的旧版本,我也强烈建议避免除 YYYY-MM-DD 之外的任何日期格式,原因有两个:
1. 这是日期函数唯一支持的格式。
2. 这种格式允许正确的字母顺序比较,例如-
'2017-01-22' > '2016-09-22' 但是 '01-22-2017' < '09-22-2016'

演示

狂欢

hdfs dfs -mkdir -p /hive/warehouse/sample_database/sample_table

hive

create external table sample_table
(
i int
)
partitioned by (day date)
location '/hive/warehouse/sample_database/sample_table'
;

选项 1 - 更改表 ... 添加分区 ...

hive

alter table sample_table add partition (day=date '2017-03-02');
alter table sample_table add partition (day=date '2017-03-03');

hive> show partitions sample_table;
OK
day=2017-03-02
day=2017-03-03
Time taken: 0.067 seconds, Fetched: 2 row(s)
hive> dfs -ls /hive/warehouse/sample_database/sample_table;
Found 2 items
... 2017-03-04 23:31 /hive/warehouse/sample_database/sample_table/day=2017-03-02
... 2017-03-04 23:31 /hive/warehouse/sample_database/sample_table/day=2017-03-03
hive>

选项 2 - hdfs dfs -mkdir ... + msck 修复表 ...

狂欢

hdfs dfs -mkdir /hive/warehouse/sample_database/sample_table/day=2017-03-02
hdfs dfs -mkdir /hive/warehouse/sample_database/sample_table/day=2017-03-03

hive

msck repair

hive> show partitions sample_table;
OK
Time taken: 0.187 seconds
hive> msck repair table sample_table;
OK
Partitions not in metastore: sample_table:day=2017-03-02 sample_table:day=2017-03-03
Repair: Added partition to metastore sample_table:day=2017-03-02
Repair: Added partition to metastore sample_table:day=2017-03-03
Time taken: 0.143 seconds, Fetched: 3 row(s)
hive> show partitions sample_table;
OK
day=2017-03-02
day=2017-03-03
Time taken: 0.076 seconds, Fetched: 2 row(s)
hive> dfs -ls /hive/warehouse/sample_database/sample_table;
Found 2 items
... 2017-03-04 23:31 /hive/warehouse/sample_database/sample_table/day=2017-03-02
... 2017-03-04 23:31 /hive/warehouse/sample_database/sample_table/day=2017-03-03
hive>

关于hadoop - 如果我们已经有一些数据,则更新分区的配置单元表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42603655/

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