我有一个典型的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/';

我也欢迎非 hive 式答案。也许s3cmd中有一种方法可以快速获取/ 20140811 /中的一定数量的数据,并将其转储到/ 20140811_halved /中。

谢谢。

最佳答案

我建议以下解决方法:

  • 创建具有相同结构的临时表。 (使用类似)
  • 插入NEW_TABLE,从OLD_TABLE限制中选择*,限制为1000;

  • 您添加了尽可能多的过滤条件以过滤出数据并加载。

    希望这对您有所帮助。

    07-24 09:39