Hive中导入Amazon S3中的分区表数据的操作

Hive中创建S3的外部表

    数据在S3存放的数据是按时间纬度存放的,每天的数据存放在各自的目录下,目录结构如下截图:

       

    每个目录下面的数据是CSV文件,现在将其导入到Hive中进行查询,通过创建对应的表结构:    

CREATE EXTERNAL TABLE `palmplay_log_pv_s3_csv`(
  `meta_id` string COMMENT 'from deserializer', 
  `brand` string COMMENT 'from deserializer', 
  `channel` string COMMENT 'from deserializer', 
  `countrycode` string COMMENT 'from deserializer')
partitioned by (dt String)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = "\t",
   "quoteChar"     = "'",
   "escapeChar"    = "\\"
)  
STORED AS TEXTFILE
LOCATION
  's3a://palmplay_log_pv_csv';

    然后通过如下语句进行查询:    

select * from palmplay_log_pv_s3_csv limit 10;
select * from palmplay_log_pv_s3_csv where dt='2018-04-09' limit 10;

    此时是查询不到结果,因为这个时候分区表的分区信息并没有加载到Hive的Metastore中,需要先执行将分区信息加载到Metastore中,才可以查询到数据。


加载表的分区信息到Metastore中

    从S3中将表的分区信息加载到Hive的Metastore中,这个同从HDFS中加载表的分区信息是一样的,执行以下命令进行加载:    

MSCK REPAIR TABLE palmplay_log_pv_s3_csv;

    然后再执行select查询就可以查询到数据了。

    注:可以使用hive.metastore.fshandler.threads参数(缺省值为15,配置在hive-site.xml中)来增加用于在MSCK阶段中扫描分区的线程数。


对表进行分析
    在Amazon S3上处理数据时,分析表的步骤与在HDFS中处理数据时的步骤相同。
    可以通过设置hive.stats.autogather = true或运行analyze table table_name compute statistics命令自动收集表统计信息,例如:
ANALYZE TABLE table_name PARTITION(dt ='2018-04-09')COMPUTE STATISTICS;
    但是,列统计信息只能通过运行列命令的分析表测试计算统计信息来收集,例如:    

ANALYZE TABLE table_name PARTITION(ds ='2018-04-09')COLUMNS;

    有关更多信息和示例,请参阅Apache文档

    参考:https://hortonworks.github.io/hdp-aws/s3-hive/index.html


    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值