hive sql語法

#hive的python 鏈接
import  pyhs2
conn=pyhs2.connect(host=HIVE_CONFIG["host"],port=HIVE_CONFIG["port"],authMechanism="PLAIN",user="hdfs")
def run_hive_query(sql):
    with conn.cursor()  as cursor:
        cursor.execute(sql)
        return cursor.fetchall()


1.hive模糊搜索表python

  show tables like '*name*';

2.查看錶結構信息
  desc formatted table_name;
  desc table_name;

3.查看分區信息
  show partitions table_name;

4.根據分區查詢數據
  select table_coulm from table_name where partition_name = '2014-02-25';

5.查看hdfs文件信息
  dfs -ls /user/hive/warehouse/table02;

6.從文件加載數據進表(OVERWRITE覆蓋,追加不須要OVERWRITE關鍵字)
  LOAD DATA LOCAL INPATH 'dim_csl_rule_config.txt' OVERWRITE into table dim.dim_csl_rule_config;
  --從查詢語句給table插入數據
  INSERT OVERWRITE TABLE test_h02_click_log PARTITION(dt) select * 
  from stage.s_h02_click_log where dt='2014-01-22' limit 100;

7.導出數據到文件
  insert overwrite directory '/tmp/csl_rule_cfg' select a.* from dim.dim_csl_rule_config a;
  hive -e "select day_id,pv,uv,ip_count,click_next_count,second_bounce_rate,return_visit,pg_type from tmp.tmp_h02_click_log_baitiao_ag_sum where day_id in ('2014-03-06','2014-03-07','2014-03-08','2014-03-09','2014-03-10');"> /home/jrjt/testan/baitiao.dat;

8.自定義udf函數
  1.繼承UDF類
  2.重寫evaluate方法
  3.把項目打成jar包
  4.hive中執行命令add jar /home/jrjt/dwetl/PUB/UDF/udf/GetProperty.jar;
  5.建立函數create temporary function get_pro as 'jd.Get_Property'//jd.jd.Get_Property爲類路徑;

9.查詢顯示列名 及 行轉列顯示 
  set hive.cli.print.header=true; // 打印列名
  set hive.cli.print.row.to.vertical=true; // 開啓行轉列功能, 前提必須開啓打印列名功能
  set hive.cli.print.row.to.vertical.num=1; // 設置每行顯示的列數

10.查看錶文件大小,下載文件到某個目錄,顯示多少行到某個文件
   dfs -du hdfs://BJYZH3-HD-JRJT-4137.jd.com:54310/user/jrjt/warehouse/stage.db/s_h02_click_log;
   dfs -get /user/jrjt/warehouse/ods.db/o_h02_click_log_i_new/dt=2014-01-21/000212_0 /home/jrjt/testan/;
   head -n 1000 文件名 > 文件名

11.殺死某個任務  不在hive shell中執行
   hadoop job -kill job_201403041453_58315

12.hive-wui路徑
   http://172.17.41.38/jobtracker.jsp

13.刪除分區
   alter table tmp_h02_click_log_baitiao drop partition(dt='2014-03-01');
   alter table d_h02_click_log_basic_d_fact drop partition(dt='2014-01-17');


14.hive命令行操做
   執行一個查詢,在終端上顯示mapreduce的進度,執行完畢後,最後把查詢結果輸出到終端上,接着hive進程退出,不會進入交互模式。
   hive -e 'select table_cloum from table'
   -S,終端上的輸出不會有mapreduce的進度,執行完畢,只會把查詢結果輸出到終端上。這個靜音模式很實用,,經過第三方程序調用,第三方程序經過hive的標準輸出獲取結果集。
   hive -S -e 'select table_cloum from table'
   執行sql文件
   hive -f hive_sql.sql

15.hive上操做hadoop文件基本命令
    查看文件大小
    dfs -du /user/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-15;
    刪除文件
    dfs -rm /user/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-15;

16.插入數據sql、導出數據sql
    1.insert 語法格式爲:
    基本的插入語法:
    INSERT OVERWRITE TABLE tablename [PARTITON(partcol1=val1,partclo2=val2)]select_statement FROM from_statement
    insert overwrite table test_insert select * from test_table;

    對多個表進行插入操做:
    FROM fromstatte
    INSERT OVERWRITE TABLE tablename1 [PARTITON(partcol1=val1,partclo2=val2)]select_statement1
    INSERT OVERWRITE TABLE tablename2 [PARTITON(partcol1=val1,partclo2=val2)]select_statement2

    from test_table                     
    insert overwrite table test_insert1 
    select key
    insert overwrite table test_insert2
    select value;

    insert的時候,from子句便可以放在select 子句後面,也能夠放在 insert子句前面。
    hive不支持用insert語句一條一條的進行插入操做,也不支持update操做。數據是以load的方式加載到創建好的表中。數據一旦導入就不能夠修改。

    2.經過查詢將數據保存到filesystem
    INSERT OVERWRITE [LOCAL] DIRECTORY directory SELECT.... FROM .....

    導入數據到本地目錄:
    insert overwrite local directory '/home/zhangxin/hive' select * from test_insert1;
    產生的文件會覆蓋指定目錄中的其餘文件,即將目錄中已經存在的文件進行刪除。

    導出數據到HDFS中:
    insert overwrite directory '/user/zhangxin/export_test' select value from test_table;

    同一個查詢結果能夠同時插入到多個表或者多個目錄中:
    from test_insert1
    insert overwrite local directory '/home/zhangxin/hive' select * 
    insert overwrite directory '/user/zhangxin/export_test' select value;

17.mapjoin的使用 應用場景:1.關聯操做中有一張表很是小 2.不等值的連接操做
    select /*+ mapjoin(A)*/ f.a,f.b from A t join B f  on ( f.a=t.a and f.ftime=20110802) 
sql

    Join查找操做的基本原則:應該將條目少的表/子查詢放在 Join 操做符的左邊。緣由是在 Join 操做的 Reduce 階段,位於 Join 操做符左邊的表的內容會被加載進內存,將條目少的表放在左邊,能夠有效減小發生內存溢出錯誤的概率。shell

    因爲join操做是在where操做以前執行,因此當你在執行join時,where條件並不能起到減小join數據的做用;案例:json

    SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key)session

      WHERE a.ds='2009-07-07' AND b.ds='2009-07-07'jsp

    最好修改成:函數

    SELECT a.val, b.val FROM a LEFT OUTER JOIN boop

      ON (a.key=b.key AND b.ds='2009-07-07' AND a.ds='2009-07-07')fetch


18.perl啓動任務
   perl /home/jrjt/dwetl/APP/APP/A_H02_CLICK_LOG_CREDIT_USER/bin/a_h02_click_log_credit_user.pl 
   APP_A_H02_CLICK_LOG_CREDIT_USER_20140215.dir >& /home/jrjt/dwetl/LOG/APP/20140306/a_h02_click_log_credit_user.pl.4.log

19.查看perl進程
   ps -ef|grep perl

20.hive命令移動表數據到另一張表目錄下並添加分區
   dfs -cp /user/jrjt/warehouse/tmp.db/tmp_h02_click_log/dt=2014-02-18 /user/jrjt/warehouse/ods.db/o_h02_click_log/;
   dfs -cp /user/jrjt/warehouse/tmp.db/tmp_h02_click_log_baitiao/* /user/jrjt/warehouse/dw.db/d_h02_click_log_baitiao_basic_d_fact/;--複製全部分區數據
   alter table d_h02_click_log_baitiao_basic_d_fact add partition(dt='2014-03-11') location '/user/jrjt/warehouse/dw.db/d_h02_click_log_baitiao_basic_d_fact/dt=2014-03-11';

21.導出白條數據
    hive -e "select day_id,pv,uv,ip_count,click_next_count,second_bounce_rate,return_visit,pg_type from tmp.tmp_h02_click_log_baitiao_ag_sum where day_id like '2014-03%';"> /home/jrjt/testan/baitiao.xlsx;

22.hive修改表名
    ALTER TABLE o_h02_click_log_i RENAME TO o_h02_click_log_i_bk;

23.hive複製表結構
   CREATE TABLE d_h02_click_log_baitiao_ag_sum LIKE tmp.tmp_h02_click_log_baitiao_ag_sum;

25.hive添加字段
   alter table tmp_h02_click_log_baitiao_ag_sum add columns(current_session_timelenth_count bigint comment '頁面停留總時長');
   ALTER TABLE tmp_h02_click_log_baitiao CHANGE current_session_timelenth current_session_timelenth bigint comment '當前會話停留時間';

26.hive開啓簡單模式不啓用mr
   set hive.fetch.task.conversion=more;

27.以json格式輸出執行語句會讀取的input table和input partition信息
   Explain dependency query  

ui

相關文章
相關標籤/搜索