【问题标题】:Hive partitions by date?按日期划分 Hive 分区?
【发布时间】:2016-08-12 21:01:24
【问题描述】:

我有一张像

这样的外部表
CREATE EXTERNAL TABLE TAB(ID INT, NAME STRING) PARTITIONED BY(YEAR INT, MONTH STRING , DATES INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

我有类似的数据

/user/input/2015/jan/1;
/user/input/2015/jan/30

像 2000 年到 2016 年那样,每年有 12 个月零 30 天;

ALTER TABLE TAB ADD PARTITION(year = '2015', month = 'jan',dates = '5') LOCATION '/user/input/2015/jan/1';  

如果我这样做,我只会得到一天的数据;

select * from TAB where (year = '2015', month = 'jan',dates = '5'); 

如果我跑了

select * from TAB where (year = '2015', month = 'jan',dates = '6'); 

我没有得到任何数据。请帮助我了解如何为上述场景更改表格

【问题讨论】:

    标签: sql apache-spark hive hiveql bigdata


    【解决方案1】:
    create table tab(id int,name string,dt string) partitioned by (year string,month string);
    
    create table samp(id int,name string,dt string) row format delimited fields terminated by '\t';
    
    load data inpath '\dir' into table samp;
    insert overwrite table tab partition (y,m) select id,name dt,YEAR(dt),MONTH(dt) from samp;
    

    【讨论】:

    • 在这种情况下,我不想将数据加载到本地。还有其他选择吗??
    【解决方案2】:

    您将获得 1 天的 ALTER TABLE TAB ADD PARTITION(year = '2015', month = 'jan',dates = '5') LOCATION '/user/input/2015/jan/1';,因为您在位置值中指定了 1 个文件

    5天创建分区如下

    ALTER TABLE TAB 
    ADD PARTITION(dates <= '5') 
    LOCATION '/user/input/2015/jan/'; 
    

    【讨论】:

    • 添加分区语句中的“日期”附近的输入不匹配'
    【解决方案3】:

    alter table with all dates only 选项,我也一样 "ALTER TABLE TAB ADD PARTITION(year = '2015', month = 'jan',dates = '5') LOCATION '/user/input/2015/jan/1';"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多