gpt4 book ai didi

hadoop - Hive:从现有分区表创建新表

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

我使用的是 Amazon 的 Elastic MapReduce,我有一个基于存储在 Amazon S3 中的一系列日志文件创建的 Hive 表,并且像这样按天拆分到文件夹中:

  • data/day=2011-09-01/log_file.tsv
  • data/day=2011-09-02/log_file.tsv

我目前正在尝试创建一个额外的表来过滤掉这些日志文件中一些不需要的事件,但我不知道该怎么做并不断收到错误,例如:

失败:语义分析错误:需要指定分区列,因为目标表已分区。

如果我的初始表创建语句如下所示:

CREATE EXTERNAL TABLE IF NOT EXISTS table1 (
... fields ...
)
PARTITIONED BY ( DAY STRING )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION 's3://bucketname/data/';

初始表工作正常,我已经能够毫无问题地查询它。

那么我应该如何创建一个新表来共享前一个表的结构但只是过滤掉数据?这似乎不起作用。

CREATE EXTERNAL TABLE IF NOT EXISTS table2 LIKE table1;

FROM table1
INSERT OVERWRITE TABLE table2
SELECT * WHERE
col1 = '%somecriteria%' AND
more criteria...
;

正如我上面所说,这将返回:

失败:语义分析错误:需要指定分区列,因为目标表已分区。

谢谢!

最佳答案

这对我总是有效:

CREATE EXTERNAL TABLE IF NOT EXISTS table2 LIKE table1;
INSERT OVERWRITE TABLE table2 PARTITION (day) SELECT col1, col2, ..., day FROM table1;
ALTER TABLE table2 RECOVER PARTITIONS;

请注意,我已将“day”添加为 SELECT 语句中的一列。另请注意,有一个 ALTER TABLE 行,这是 Hive 了解 table2 中新创建的分区所必需的。

关于hadoop - Hive:从现有分区表创建新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260483/

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