hadoop - 如何在特定日期之前使用配置单元添加分区?

标签 hadoop amazon-s3 hive

我正在使用配置单元(带有外部表)来处理存储在 amazon S3 上的数据。

我的数据分区如下:

                       DIR   s3://test.com/2014-03-01/
                       DIR   s3://test.com/2014-03-02/
                       DIR   s3://test.com/2014-03-03/
                       DIR   s3://test.com/2014-03-04/
                       DIR   s3://test.com/2014-03-05/

s3://test.com/2014-03-05/ip-foo-request-2014-03-05_04-20_00-49.log
s3://test.com/2014-03-05/ip-foo-request-2014-03-05_06-26_19-56.log
s3://test.com/2014-03-05/ip-foo-request-2014-03-05_15-20_12-53.log
s3://test.com/2014-03-05/ip-foo-request-2014-03-05_22-54_27-19.log

如何使用hive创建分区表?

   CREATE EXTERNAL TABLE test (
    foo string,
    time string,
    bar string
    )  PARTITIONED BY (? string)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\t'
    LOCATION 's3://test.com/';

有人可以回答这个问题吗?谢谢!

最佳答案

首先从正确的表定义开始。在你的情况下,我将只使用你写的内容:

CREATE EXTERNAL TABLE test (
    foo string,
    time string,
    bar string
)  PARTITIONED BY (dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION 's3://test.com/';

默认情况下,Hive 期望分区位于通过约定 s3://test.com/partitionkey=partitionvalue 命名的子目录中。例如

s3://test.com/dt=2014-03-05

如果您遵循此约定,则可以使用 MSCK 添加所有分区。

如果您不能或不想使用此命名约定,则需要添加所有分区,如下所示:

ALTER TABLE test
    ADD PARTITION (dt='2014-03-05')
    location 's3://test.com/2014-03-05'

关于hadoop - 如何在特定日期之前使用配置单元添加分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22220837/

相关文章:

ubuntu - 设置单节点hadoop时,没有要启动的namenode

hadoop - Hive 文件格式优缺点

api - 使用hue api注册配置单元udf

hadoop - Flume流GZ文件

hadoop - 为什么现实世界中的MapReduce作业往往具有非常小的数据集大小?

hadoop - 如何使用Spring Batch Yarn Application重新启动Map Reduce Hadoop作业?

encryption - 将 AWS 凭证作为用户数据传递给 EC2 实例的最佳方法是什么?

ios - S3TransferManager 无法在 ios 中的 S3GetObjectRequest targetedFilePath 上保存文件/数据

amazon-web-services - 我们是否需要目录结构逻辑来在 Amazon S3/Cloudfront 上存储数百万张图像?

sql - 使用 NOT EXISTS 重写查询的指导