Hive中创建S3的外部表

Posted qwangxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive中创建S3的外部表相关的知识,希望对你有一定的参考价值。

Hive中创建S3的外部表

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

       技术分享图片

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

[sql] view plain copy
 
  1. hadoop到s3
    hadoop distcp hdfs:/user/hive/data/SearchRecord/2014-02-16 s3n://*/hadoop/user/hive/data/SearchRecord/2014-02-16 

    需要在core-site.xml中配置好fs.s3n.awsAccessKeyId和fs.s3n.awsSecretAccessKey

    注意s3的路径需要使用s3n

  2. s3到hadoop
    hadoop distcp s3n://*/hadoop/user/hive/data/SearchRecord/2014-02-16/ hdfs:/user/hadoop/test/SearchRecord/2014-02-16
  1. CREATE EXTERNAL TABLE `palmplay_log_pv_s3_csv`(  
  2.   `meta_id` string COMMENT ‘from deserializer‘,   
  3.   `brand` string COMMENT ‘from deserializer‘,   
  4.   `channel` string COMMENT ‘from deserializer‘,   
  5.   `countrycode` string COMMENT ‘from deserializer‘)  
  6. partitioned by (dt www.yongshiyule178.com String)  
  7. ROW FORMAT SERDE  
  8.   ‘org.apache.hadoop.hive.serde2.OpenCSVSerde‘  
  9. WITH SERDEPROPERTIES (  
  10.    "separatorChar" www.wanmeiyuele.cn = "\t",  
  11.    "quoteChar"     =www.hjha178.com/ "‘",  
  12.    "escapeChar"  www.douniu157.com  = "\\"  
  13. )    
  14. STORED AS www.yongxinzaixian.cn TEXTFILE  
  15. LOCATION  
  16.   ‘s3a://palmplay_www.wmylpt.com/  log_pv_csv‘;  

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

[sql] view plain copy
 
  1. select * from palmplay_log_pv_s3_csv limit 10;  
  2. select * from palmplay_log_pv_s3_csv where dt=‘2018-04-09‘ limit 10;  

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

 

加载表的分区信息到Metastore中

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

[plain] view plain copy
 
  1. 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;
    但是,列统计信息只能通过运行列命令的分析表测试计算统计信息来收集,例如:    

[sql] view plain copy
 
  1. ANALYZE TABLE table_name PARTITION(ds =‘2018-04-09‘)COLUMNS;  

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













以上是关于Hive中创建S3的外部表的主要内容,如果未能解决你的问题,请参考以下文章

在 hive 的外部表中创建分区

使用镶木地板文件作为存储在 Hive 中创建外部表后获取 NULL

hive中创建外部分区表使用location是指定数据存放位置还是指数据来源

在 Impala 中创建外部表 - 错误

在配置单元中创建外部表时更改默认位置

hive中创建外部分区表测试