成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hive動態分區詳解,你知道嗎?

運維 數據庫運維
Hive根據select語句中最后兩列來確定分區字段country和state的值,這里刻意使用了不同的命名,就是為了強調源表字段和輸出分區值之間的關系是根據位置而不是根據命名來匹配的。

 [[382321]]

本文轉載自微信公眾號「Java大數據與數據倉庫」,作者柯同學。轉載本文請聯系Java大數據與數據倉庫公眾號。

動態分區調整

  • 動態分區屬性:設置為true表示開啟動態分區功能(默認為false)hive.exec.dynamic.partition=true;
  • 動態分區屬性:設置為nonstrict,表示允許所有分區都是動態的(默認為strict)設置為strict,表示必須保證至少有一個分區是靜態的hive.exec.dynamic.partition.mode=strict;
  • 動態分區屬性:每個mapper或reducer可以創建的最大動態分區個數hive.exec.max.dynamic.partitions.pernode=100;
  • 動態分區屬性:一個動態分區創建語句可以創建的最大動態分區個數hive.exec.max.dynamic.partitions=1000;
  • 動態分區屬性:全局可以創建的最大文件個數hive.exec.max.created.files=100000;
  • 控制DataNode一次可以打開的文件個數 這個參數必須設置在DataNode的$HADOOP_HOME/conf/hdfs-site.xml文件中
  1. <property> 
  2.     <name>dfs.datanode.max.xcievers</name
  3.     <value>8192</value> 
  4. </property> 

注意

在Hive中,動態分區會造成在插入數據過程中,生成過多零碎的小文件

動態分區插入

如果需要創建非常多的分區,用戶就需要寫非常多的條件查詢sql把數據插入對應分區。好在Hive提供了動態分區功能,可以根據分區字段的取值自動創建分區。前面列出的開啟動態分區hive.exec.dynamic.partition,并且hive.exec.dynamic.partition.mode需要為非嚴格模式,通常如果分區很多的話,hive.exec.max.dynamic.partitions.pernode也需要設置為一個較大的數,否則會有報錯提醒。

現在有sql:

  1. insert overwrite table employees partitions (country, state) 
  2. select ...,se.cnty, se.st 
  3. from staged_employees se; 

可以看出,Hive根據select語句中最后兩列來確定分區字段country和state的值,這里刻意使用了不同的命名,就是為了強調源表字段和輸出分區值之間的關系是根據位置而不是根據命名來匹配的。

動靜分區結合

也可以混合使用動態和靜態分區。上面那個例子,我們可以指定國家這個分區值五為靜態值US,而分區字段state是動態值:

  1. insert overwrite table employees partitions (country = 'US', state) 
  2. select ...,se.cnty, se.st 
  3. from staged_employees se 
  4. where se.cnty = 'US'

注意:靜態分區需要出現在動態分區字段之前。

動態分區功能默認情況下是沒有開啟的,默認是以嚴格模式執行,這種模式下要求至少有一列分區字段是靜態的。這樣做的好處是可以防止因設計或其它錯誤查詢導致產生大量的分區,比如sql boy不小心使用了時間戳作為分區字段,那將是災難。在日常導入一天的數據,通常是指定日期為靜態分區,小時為動態分區,進行混合模式導入。

例子

建表

  1. create table if not exists test.test 
  2. id string, 
  3. name string 
  4. partitioned by (dt string,hour string) 
  5. row format delimited fields terminated by '\t'
  6.  
  7. create table if not exists test.test2 
  8. id string, 
  9. name string 
  10. partitioned by (dt string,hour string) 
  11. row format delimited fields terminated by '\t' 
  12. stored as orc; 

導入數據到test.test表

  1. load data local inpath '/home/hadoop/data/test.txt' into table test.test partition(dt = '2019-09-10'hour = '02'); 
  2.  
  3. test.txt 
  4. 001    keguang 
  5. 002    kg 
  6. 003    kk 
  7. 004    ikeguang 

利用動態分區插入

  1. insert overwrite table test.test2 partition(dt, hourselect `(dt|hour)?+.+`,dt,hour from test.test; 

這里,(dt|hour)?+.+表示查詢出test表除了dt和hour這兩個字段的其它所有字段。

 

責任編輯:武曉燕 來源: Java大數據與數據倉庫
相關推薦

2024-07-01 08:40:18

tokio派生線程

2024-04-07 00:00:00

ESlint命令變量

2024-05-28 09:12:10

2023-04-26 10:21:04

2023-12-20 08:23:53

NIO組件非阻塞

2024-04-30 09:02:48

2023-12-12 08:41:01

2024-11-14 10:44:57

2022-12-02 14:12:52

新能源汽車海爾

2025-02-18 08:11:17

2024-07-08 00:00:01

多線程ThreadC#

2022-11-04 14:16:05

2023-03-21 07:39:51

CentOS掛載硬盤

2024-01-15 12:16:37

2023-01-13 17:02:10

操作系統鴻蒙

2021-10-14 06:52:47

算法校驗碼結構

2022-09-29 15:32:58

云計算計算模式

2020-02-20 08:30:49

OSPF網絡協議路由協議

2022-11-28 00:04:17

2021-04-20 23:16:06

SparkSQL語法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜a√ | 亚洲高清av| 综合久久综合久久 | 欧美a在线| 天堂在线1| 日韩国产欧美在线观看 | 久草视频网站 | 日韩欧美一级精品久久 | 日韩电影一区二区三区 | 久久精品91久久久久久再现 | 日本电影免费完整观看 | 正在播放亚洲 | 美女天天操 | 成人精品国产一区二区4080 | 三级国产三级在线 | 91色视频在线观看 | 二区中文| 亚洲欧洲一区 | 日本黄色免费大片 | 天天综合成人网 | 国产色婷婷精品综合在线手机播放 | 亚洲精品久久久一区二区三区 | 福利视频网站 | 曰韩一二三区 | 武道仙尊动漫在线观看 | 欧美日韩在线视频一区 | 91高清免费 | 亚洲激情一区二区三区 | 成人在线免费视频观看 | 国产精品久久久久久久三级 | 一区二区久久 | 北条麻妃国产九九九精品小说 | 国产一区二区三区色淫影院 | 精品亚洲一区二区三区 | 6080亚洲精品一区二区 | 久久久女女女女999久久 | 色资源在线观看 | 羞羞涩涩在线观看 | 欧美日韩国产精品一区二区 | 久久高清 | 国产精品国产三级国产aⅴ入口 |