hadoop - 在Hive中,如何仅将部分原始数据加载到表中?

标签 hadoop hive s3cmd

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

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

    希望这对您有所帮助。

    关于hadoop - 在Hive中,如何仅将部分原始数据加载到表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093789/

    相关文章:

    hadoop问题

    bash - Hadoop 和 Bash : delete filenames matching range

    php - 如何将 PHP 与 HIVE 连接?

    apache-spark - Hadoop 3和spark.sql:与HiveWarehouseSession和spark.sql一起使用

    amazon-s3 - S3 同步不可写警告

    hadoop - 运行 Pig 脚本时出现堆空间问题

    java - Rancher 模板 - 主机名中的 Hadoop 非法字符

    hadoop - 如果文件具有不同的列数,如何将数据加载到同一个 Hive 表

    amazon-s3 - 以编程方式创建 s3cmd 配置文件

    amazon-s3 - 如何在 Amazon EMR 实例中安装 s3cmd