【问题标题】:Partition not able to understand分区看不懂
【发布时间】:2016-06-27 12:37:18
【问题描述】:

我的输入数据如下:

1,srinivas,courtthomas,memphis
2,vindhya,courtthomas,memphis
3,srinivas,courtthomas,kolkata
4,vindhya,courtthomas,memphis

我创建了以下查询:

create EXTERNAL table seesaw (id int,name string,location string) partitioned by (address string) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile LOCATION '/seesaw';

LOAD DATA INPATH '/sampledoc' OVERWRITE INTO TABLE seesaw PARTITION (address = 'Memphis');

当我尝试获取我的查询时,它如下所示:

Select * from seesaw;                                                                     
OK
1   srinivas    courtthomas Memphis
2   vindhya courtthomas Memphis
3   srinivas    courtthomas Memphis
4   vindhya courtthomas Memphis

我真的不明白最后所有的行是如何显示孟菲斯的。

【问题讨论】:

    标签: hive partition


    【解决方案1】:

    仔细阅读您的代码:

    create EXTERNAL table seesaw (id int,name string,location string)
    

    注意只有三列,idnamelocation

    但是,您的数据

    1,srinivas,courtthomas,memphis
    2,vindhya,courtthomas,memphis
    3,srinivas,courtthomas,kolkata
    4,vindhya,courtthomas,memphis
    

    有四列。这里有问题。

    LOAD DATA INPATH '/sampledoc'
      OVERWRITE INTO TABLE seesaw
      PARTITION (address = 'Memphis');
    

    您要求将仅包含courtthomas 的类别划分为Memphis。结果不出所料,不是您想要的。

    【讨论】:

    • 写入文件系统的数据被序列化为文本,列由 ^A 分隔,行由换行符分隔,您能告诉我这是什么意思吗?我在蜂巢手册中找到了它。特别是 ^A 是什么意思?
    【解决方案2】:

    如果您使用外部表,则需要为每个分区手动创建文件夹,即在您的情况下 - 创建两个文件夹 [address=Memphis] 和 [address=kolkata] 并复制相应的输入数据文件文件夹,然后将分区添加到元数据,如下所示:

    ALTER TABLE seesaw ADD PARTITION(address='Memphis');
    ALTER TABLE seesaw ADD PARTITION(address='kolkata');
    

    有关如何执行此操作的简单示例,请参阅本文 - hive-external-table-with-partitions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多