Hive中創建S3的外部表 數據在S3存放的數據是按時間緯度存放的,每天的數據存放在各自的目錄下,目錄結構如下截圖: 每個目錄下麵的數據是CSV文件,現在將其導入到Hive中進行查詢,通過創建對應的表結構: [sql] view plain copy CREATE EXTERNAL TABLE `p ...
Hive中創建S3的外部表
數據在S3存放的數據是按時間緯度存放的,每天的數據存放在各自的目錄下,目錄結構如下截圖:
每個目錄下麵的數據是CSV文件,現在將其導入到Hive中進行查詢,通過創建對應的表結構:
[sql] view plain copy- 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';
然後通過如下語句進行查詢:
[sql] view plain copy- 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中載入表的分區信息是一樣的,執行以下命令進行載入:
[plain] view plain copy- MSCK REPAIR TABLE palmplay_log_pv_s3_csv;
然後再執行select查詢就可以查詢到數據了。
註:可以使用hive.metastore.fshandler.threads參數(預設值為15,配置在hive-site.xml中)來增加用於在MSCK階段中掃描分區的線程數。
如果你想瞭解大數據的學習路線,想學習大數據知識以及需要免費的學習資料可以加群:784789432.歡迎你的加入。每天下午三點開直播分享基礎知識,晚上20:00都會開直播給大家分享大數據項目實戰。
對錶進行分析
在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