0

我有一个典型的CREATE TABLE陈述如下:

CREATE EXTERNAL TABLE temp_url (
    MSISDN STRING,
    TIMESTAMP STRING,
    URL STRING,
    TIER1 STRING
)
row format delimited fields terminated by '\t' lines terminated by '\n'
LOCATION 's3://mybucket/input/project_blah/20140811/';

其中 /20140811/ 是一个目录,里面有千兆字节的数据。

加载东西不是问题。然而,查询它上面的任何东西都会让 Hive 窒息,并且只会给我一些MapRed错误。

所以相反,我想问一下是否有办法只加载/20140811/中的部分数据。我知道我可以从文件夹中选择一些文件,将它们转储到另一个文件夹中,然后使用它,但这似乎很乏味,尤其是当我有 20 个左右的 /20140811/ 目录时。

有没有这样的东西:

CREATE EXTERNAL TABLE temp_url (
    MSISDN STRING,
    TIMESTAMP STRING,
    URL STRING,
    TIER1 STRING
)
row format delimited fields terminated by '\t' lines terminated by '\n'
LOCATION 's3://mybucket/input/project_blah/Half_of_20140811/';

我也对非蜂巢式答案持开放态度。也许有一种方法s3cmd可以快速获取 /20140811/ 中的一定数量的数据,将其转储到 /20140811_halved/ 或其他东西中。

谢谢。

4

2 回答 2

0

我建议以下作为解决方法:

  1. 创建具有相同结构的临时表。(使用喜欢)
  2. 插入 NEW_TABLE select * from OLD_TABLE limit 1000;

您添加尽可能多的过滤条件来过滤数据和加载。

希望这对您有所帮助。

于 2014-09-29T07:18:49.667 回答
0

既然您说您有“20 个左右的 /20140811/ 目录”,为什么不尝试在这些目录上创建一个带有分区的外部表并在单个分区上运行您的查询。

于 2014-09-29T08:38:33.737 回答