hive查詢語言和sql的不同
Hive是建立在 Hadoop 上的數據倉庫基礎構架。
它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。Hive 定義了簡單的類 SQL 查詢語言,稱為 HQL,它允許熟悉 SQL 的用戶查詢數據。
同時,這個語言也允許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 無法完成的復雜的分析工作。Hive 采用類SQL 的查詢方式,將SQL 查詢轉換為MapReduce 的job 在Hadoop集群上執行。
hive中怎么寫查詢語句會讓reduce的數量多
開啟動態分區:
*ion=true
默認值:false
描述:是否允許動態分區
*=nonstrict
默認值:strict
描述:strict是避免全分區字段是動態的,必須有至少一個分區字段是指定有值的。
讀取表的時候可以不指定分區。
設置如下參數配置動態分區的使用環境:
*e=100
默認值:100
描述:each mapper or reducer可以創建的最大動態分區數
*ions=1000
默認值:1000
描述:一個DML操作可以創建的最大動態分區數
*=100000
默認值:100000
描述:一個DML操作可以創建的文件數
設置如下參數取消一些限制(HIVE 0.7后沒有此限制):
*es=false
默認值:true
描述:是否合并Map的輸出文件,也就是把小文件合并成一個map
*files=false
默認值:false
描述:是否合并Reduce的輸出文件,也就是在Map輸出階段做一次reduce操作,再輸出
set *=*eHiveInputFormat;
這個參數表示執行前進行小文件合并,
前面三個參數確定合并文件塊的大小,大于文件塊大小128m的,
按照128m來分隔,小于128m,大于100m的,按照100m來分隔,把那些小于100m的(包括小文件和分隔大文件剩下的),
進行合并,最終生成了74個塊。
自0.7版本后Hive開始支持任務執行選擇本地模式(local mode),如此一來,對數據量比較小的操作,就可以在本地執行,這樣要比提交任務到集群執行效率要快很多。
配置如下參數,可以開啟Hive的本地模式:
hive> set *=true;(默認為false)
求一個hive的sql語句
有點不太明白你的意思,我只按照我自己的理解說了
一般hive 表應該建立一個以day(每一天,比如day=20141227,代表2014-12-27的數據)作為分區,每一天都存一個分區,這個如果想統計7天的 你可以再shell中得到今天作為變量,然后往前推7天那一天作為變量,這兩個變量就可以寫個sql
select * from tablename where day=sevenbeforeday
如果你想從關系型數據庫中導出七個表到hive,就每一天作為分區
hive中怎么寫查詢語句會讓reduce的數量多
開啟動態分區:*ion=true默認值:false描述:是否允許動態分區*=nonstrict默認值:strict描述:strict是避免全分區字段是動態的,必須有至少一個分區字段是指定有值的。
讀取表的時候可以不指定分區。設置如下參數配置動態分區的使用環境:*e=100默認值:100描述:each mapper or reducer可以創建的最大動態分區數*ions=1000默認值:1000描述:一個DML操作可以創建的最大動態分區數*=100000默認值:100000描述:一個DML操作可以創建的文件數設置如下參數取消一些限制(HIVE 0.7后沒有此限制):*es=false默認值:true描述:是否合并Map的輸出文件,也就是把小文件合并成一個*files=false默認值:false描述:是否合并Reduce的輸出文件,也就是在Map輸出階段做一次reduce操作,再輸出set *=*eHiveInputFormat;這個參數表示執行前進行小文件合并,前面三個參數確定合并文件塊的大小,大于文件塊大小128m的,按照128m來分隔,小于128m,大于100m的,按照100m來分隔,把那些小于100m的(包括小文件和分隔大文件剩下的),進行合并,最終生成了74個塊。
自0.7版本后Hive開始支持任務執行選擇本地模式(local mode),如此一來,對數據量比較小的操作,就可以在本地執行,這樣要比提交任務到集群執行效率要快很多。 配置如下參數,可以開啟Hive的本地模式:hive> set *=true;(默認為false)。
hive 執行查詢語句時間太長 550W數據count出來 需要60多秒 還沒有
這個機制不一樣。
在oracle中,如果你count某一列,應該是僅僅加載這一列,如果有索引啥的,直接在索引上統計了,當然很快。(如果你count varchar非常大之類的字段,速度應該會非常慢)
但是hive的cunt是基于hadoop的MR任務的,還是讀取每一行的所有的數據,如果你每行中有類似于clob之類的列的話,IO的開銷可想而知。 另外 MR任務的啟動也是需要時間的。
另外就是和你的hadoop的數據節點多少有關。
hive查詢語言和sql的不同
Hive是建立在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。Hive 定義了簡單的類 SQL 查詢語言,稱為 HQL,它允許熟悉 SQL 的用戶查詢數據。同時,這個語言也允許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 無法完成的復雜的分析工作。
Hive 采用類SQL 的查詢方式,將SQL 查詢轉換為MapReduce 的job 在Hadoop集群上執行
hive 怎么看一個sql語句執行幾個job
通過hive自帶的server2的thrift模式提交的sql可以獲得狀態進度,jdbc方式沒有試過。
其實,我們完全可以不使用hive,sql-on-Hadoop的框架有ibm的bigsql,Apache的dirll,impala等都是非常不錯的,都可以替代hive。速度都比hive要快很多。
偶理解HIVE只是提供查詢和數據處理功能的(解析HIVEQL語句為MAPReduce任務),不負責數據存儲的。數據存儲應該是HBase和HDFS的功能,HBase是KeyValue的存儲方式,適用于固定列查詢的數據,如果查詢方式多樣復雜,感覺應該是使用HDFS存儲,然后使用HIVE進行查詢和處理。