国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

這篇具有很好參考價值的文章主要介紹了大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、簡介

Hive 是一個構(gòu)建在 Hadoop 之上的數(shù)據(jù)倉庫,它可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射成表,并提供類 SQL 查詢功能,用于查詢的 SQL 語句會被轉(zhuǎn)化為 MapReduce 作業(yè),然后提交到 Hadoop 上運行。

特點:

  • 簡單、容易上手 (提供了類似 sql 的查詢語言 hql),使得精通 sql 但是不了解 Java 編程的人也能很好地進行大數(shù)據(jù)分析;
  • 靈活性高,可以自定義用戶函數(shù) (UDF) 和存儲格式;
  • 為超大的數(shù)據(jù)集設(shè)計的計算和存儲能力,集群擴展容易;
  • 統(tǒng)一的元數(shù)據(jù)管理,可與 presto/impala/sparksql 等共享數(shù)據(jù);
  • 執(zhí)行延遲高,不適合做數(shù)據(jù)的實時處理,但適合做海量數(shù)據(jù)的離線處理。

二、HQL的執(zhí)行流程

Hive 在執(zhí)行一條 HQL 的時候,會經(jīng)過以下步驟:

  • 語法解析:Antlr 定義 SQL 的語法規(guī)則,完成 SQL 詞法,語法解析,將 SQL 轉(zhuǎn)化為抽象 語法樹 AST Tree;
  • 語義解析:遍歷 AST Tree,抽象出查詢的基本組成單元 QueryBlock;
  • 生成邏輯執(zhí)行計劃:遍歷 QueryBlock,翻譯為執(zhí)行操作樹 OperatorTree;
  • 優(yōu)化邏輯執(zhí)行計劃:邏輯層優(yōu)化器進行 OperatorTree 變換,合并不必要的 ReduceSinkOperator,減少
    shuffle 數(shù)據(jù)量;
  • 生成物理執(zhí)行計劃:遍歷 OperatorTree,翻譯為 MapReduce 任務(wù);
  • 優(yōu)化物理執(zhí)行計劃:物理層優(yōu)化器進行 MapReduce 任務(wù)的變換,生成最終的執(zhí)行計劃。

HQL建表語句示例:

CREATE TABLE students(
  name      STRING,   -- 姓名
  age       INT,      -- 年齡
  subject   ARRAY<STRING>,   --學(xué)科
  score     MAP<STRING,FLOAT>,  --各個學(xué)科考試成績
  address   STRUCT<houseNumber:int, street:STRING, city:STRING, province:STRING>  --家庭居住地址
) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";

三、索引

2.3 創(chuàng)建索引

CREATE INDEX index_name     --索引名稱
  ON TABLE base_table_name (col_name, ...)  --建立索引的列
  AS index_type    --索引類型
  [WITH DEFERRED REBUILD]    --重建索引
  [IDXPROPERTIES (property_name=property_value, ...)]  --索引額外屬性
  [IN TABLE index_table_name]    --索引表的名字
  [
     [ ROW FORMAT ...] STORED AS ...  
     | STORED BY ...
  ]   --索引表行分隔符 、 存儲格式
  [LOCATION hdfs_path]  --索引表存儲位置
  [TBLPROPERTIES (...)]   --索引表表屬性
  [COMMENT "index comment"];  --索引注釋

2.4 查看索引

--顯示表上所有列的索引
SHOW FORMATTED INDEX ON table_name;

2.4 刪除索引

刪除索引會刪除對應(yīng)的索引表。
DROP INDEX [IF EXISTS] index_name ON table_name;

如果存在索引的表被刪除了,其對應(yīng)的索引和索引表都會被刪除。如果被索引表的某個分區(qū)被刪除了,那么分區(qū)對應(yīng)的分區(qū)索引也會被刪除。

2.5 重建索引

ALTER INDEX index_name ON table_name [PARTITION partition_spec] REBUILD;

重建索引。如果指定了 PARTITION,則僅重建該分區(qū)的索引。

四、索引案例

3.1 創(chuàng)建索引
在 emp 表上針對 empno 字段創(chuàng)建名為 emp_index,索引數(shù)據(jù)存儲在 emp_index_table 索引表中

create index emp_index on table emp(empno) as  
'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' 
with deferred rebuild 
in table emp_index_table ;

此時索引表中是沒有數(shù)據(jù)的,需要重建索引才會有索引的數(shù)據(jù)。

3.2 重建索引

alter index emp_index on emp rebuild; 

Hive 會啟動 MapReduce 作業(yè)去建立索引,建立好后查看索引表數(shù)據(jù)如下。三個表字段分別代表:索引列的值、該值對應(yīng)的 HDFS 文件路徑、該值在文件中的偏移量。
大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

五、Hive常用DDL操作

1.1 查看數(shù)據(jù)列表
show databases;
1.2 使用數(shù)據(jù)庫
USE database_name;
1.3 新建數(shù)據(jù)庫
語法:

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name   --DATABASE|SCHEMA 是等價的
  [COMMENT database_comment] --數(shù)據(jù)庫注釋
  [LOCATION hdfs_path] --存儲在 HDFS 上的位置
  [WITH DBPROPERTIES (property_name=property_value, ...)]; --指定額外屬性

示例:

CREATE DATABASE IF NOT EXISTS hive_test
  COMMENT 'hive database for test'
  WITH DBPROPERTIES ('create'='heibaiying');
1.4 查看數(shù)據(jù)庫信息
語法:

DESC DATABASE [EXTENDED] db_name; --EXTENDED 表示是否顯示額外屬性

示例:

DESC DATABASE  EXTENDED hive_test;
1.5 刪除數(shù)據(jù)庫
語法:

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

默認行為是 RESTRICT,如果數(shù)據(jù)庫中存在表則刪除失敗。要想刪除庫及其中的表,可以使用 CASCADE 級聯(lián)刪除。
示例:

  DROP DATABASE IF EXISTS hive_test CASCADE;

二、創(chuàng)建表

2.1 建表語法
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name     --表名
  [(col_name data_type [COMMENT col_comment],
    ... [constraint_specification])]  --列名 列數(shù)據(jù)類型
  [COMMENT table_comment]   --表描述
  [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]  --分區(qū)表分區(qū)規(guī)則
  [
    CLUSTERED BY (col_name, col_name, ...) 
   [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS
  ]  --分桶表分桶規(guī)則
  [SKEWED BY (col_name, col_name, ...) ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)  
   [STORED AS DIRECTORIES] 
  ]  --指定傾斜列和值
  [
   [ROW FORMAT row_format]    
   [STORED AS file_format]
     | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  
  ]  -- 指定行分隔符、存儲文件格式或采用自定義存儲格式
  [LOCATION hdfs_path]  -- 指定表的存儲位置
  [TBLPROPERTIES (property_name=property_value, ...)]  --指定表的屬性
  [AS select_statement];   --從查詢結(jié)果創(chuàng)建表
2.2 內(nèi)部表
  CREATE TABLE emp(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2),
    deptno INT)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
2.3 外部表
  CREATE EXTERNAL TABLE emp_external(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2),
    deptno INT)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    LOCATION '/hive/emp_external';

使用 desc format emp_external 命令可以查看表的詳細信息如下:
大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

2.4 分區(qū)表
  CREATE EXTERNAL TABLE emp_partition(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2)
    )
    PARTITIONED BY (deptno INT)   -- 按照部門編號進行分區(qū)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    LOCATION '/hive/emp_partition';
2.5 分桶表
  CREATE EXTERNAL TABLE emp_bucket(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2),
    deptno INT)
    CLUSTERED BY(empno) SORTED BY(empno ASC) INTO 4 BUCKETS  --按照員工編號散列到四個 bucket 中
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    LOCATION '/hive/emp_bucket';

2.6 傾斜表
通過指定一個或者多個列經(jīng)常出現(xiàn)的值(嚴重偏斜),Hive 會自動將涉及到這些值的數(shù)據(jù)拆分為單獨的文件。在查詢時,如果涉及到傾斜值,它就直接從獨立文件中獲取數(shù)據(jù),而不是掃描所有文件,這使得性能得到提升。

  CREATE EXTERNAL TABLE emp_skewed(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2)
    )
    SKEWED BY (empno) ON (66,88,100)  --指定 empno 的傾斜值 66,88,100
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    LOCATION '/hive/emp_skewed';  

2.7 臨時表
臨時表僅對當(dāng)前 session 可見,臨時表的數(shù)據(jù)將存儲在用戶的暫存目錄中,并在會話結(jié)束后刪除。如果臨時表與永久表表名相同,則對該表名的任何引用都將解析為臨時表,而不是永久表。臨時表還具有以下兩個限制:

不支持分區(qū)列;
不支持創(chuàng)建索引。

  CREATE TEMPORARY TABLE emp_temp(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2)
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";

2.8 CTAS創(chuàng)建表
支持從查詢語句的結(jié)果創(chuàng)建表:

CREATE TABLE emp_copy AS SELECT * FROM emp WHERE deptno='20';

2.9 復(fù)制表結(jié)構(gòu)
語法:

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name  --創(chuàng)建表表名
   LIKE existing_table_or_view_name  --被復(fù)制表的表名
   [LOCATION hdfs_path]; --存儲位置

示例:

CREATE TEMPORARY EXTERNAL TABLE  IF NOT EXISTS  emp_co  LIKE emp

2.10 加載數(shù)據(jù)到表
加載數(shù)據(jù)到表中屬于 DML 操作,這里為了方便大家測試,先簡單介紹一下加載本地數(shù)據(jù)到表中:

– 加載數(shù)據(jù)到 emp 表中

load data local inpath "/usr/file/emp.txt" into table emp;

其中 emp.txt 的內(nèi)容如下,你可以直接復(fù)制使用,也可以到本倉庫的resources 目錄下載:

7369	SMITH	CLERK	7902	1980-12-17 00:00:00	800.00		20
7499	ALLEN	SALESMAN	7698	1981-02-20 00:00:00	1600.00	300.00	30
7521	WARD	SALESMAN	7698	1981-02-22 00:00:00	1250.00	500.00	30
7566	JONES	MANAGER	7839	1981-04-02 00:00:00	2975.00		20
7654	MARTIN	SALESMAN	7698	1981-09-28 00:00:00	1250.00	1400.00	30
7698	BLAKE	MANAGER	7839	1981-05-01 00:00:00	2850.00		30
7782	CLARK	MANAGER	7839	1981-06-09 00:00:00	2450.00		10
7788	SCOTT	ANALYST	7566	1987-04-19 00:00:00	1500.00		20
7839	KING	PRESIDENT		1981-11-17 00:00:00	5000.00		10
7844	TURNER	SALESMAN	7698	1981-09-08 00:00:00	1500.00	0.00	30
7876	ADAMS	CLERK	7788	1987-05-23 00:00:00	1100.00		20
7900	JAMES	CLERK	7698	1981-12-03 00:00:00	950.00		30
7902	FORD	ANALYST	7566	1981-12-03 00:00:00	3000.00		20
7934	MILLER	CLERK	7782	1982-01-23 00:00:00	1300.00		10

加載后可查詢表中數(shù)據(jù):
大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

三、修改表
3.1 重命名表
語法:

ALTER TABLE table_name RENAME TO new_table_name;

示例:

ALTER TABLE emp_temp RENAME TO new_emp; --把 emp_temp 表重命名為 new_emp

3.2 修改列
語法:

ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type
  [COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];

示例:

-- 修改字段名和類型
ALTER TABLE emp_temp CHANGE empno empno_new INT;
-- 修改字段 sal 的名稱 并將其放置到 empno 字段后
ALTER TABLE emp_temp CHANGE sal sal_new decimal(7,2)  AFTER ename;
-- 為字段增加注釋
ALTER TABLE emp_temp CHANGE mgr mgr_new INT COMMENT 'this is column mgr';

3.3 新增列
示例:

ALTER TABLE emp_temp ADD COLUMNS (address STRING COMMENT 'home address');

四、清空表/刪除表
4.1 清空表
語法:

-- 清空整個表或表指定分區(qū)中的數(shù)據(jù)
TRUNCATE TABLE table_name [PARTITION (partition_column = partition_col_value,  ...)];
目前只有內(nèi)部表才能執(zhí)行 TRUNCATE 操作,外部表執(zhí)行時會拋出異常 Cannot truncate non-managed table XXXX。

示例:

TRUNCATE TABLE emp_mgt_ptn PARTITION (deptno=20);

4.2 刪除表
語法:

DROP TABLE [IF EXISTS] table_name [PURGE]; 

內(nèi)部表:不僅會刪除表的元數(shù)據(jù),同時會刪除 HDFS 上的數(shù)據(jù);
外部表:只會刪除表的元數(shù)據(jù),不會刪除 HDFS 上的數(shù)據(jù);
刪除視圖引用的表時,不會給出警告(但視圖已經(jīng)無效了,必須由用戶刪除或重新創(chuàng)建)。
五、其他命令
5.1 Describe

查看數(shù)據(jù)庫:

DESCRIBE|Desc DATABASE [EXTENDED] db_name;  --EXTENDED 是否顯示額外屬性

查看表:

DESCRIBE|Desc [EXTENDED|FORMATTED] table_name --FORMATTED 以友好的展現(xiàn)方式查看表詳情

5.2 Show

  1. 查看數(shù)據(jù)庫列表
-- 語法
SHOW (DATABASES|SCHEMAS) [LIKE 'identifier_with_wildcards'];

-- 示例:
SHOW DATABASES like 'hive*';

LIKE 子句允許使用正則表達式進行過濾,但是 SHOW 語句當(dāng)中的 LIKE 子句只支持 *(通配符)和 |(條件或)兩個符號。例如 employees,emp *,emp * | * ees,所有這些都將匹配名為 employees 的數(shù)據(jù)庫。

  1. 查看表的列表
-- 語法
SHOW TABLES [IN database_name] ['identifier_with_wildcards'];

-- 示例
SHOW TABLES IN default;
  1. 查看視圖列表
SHOW VIEWS [IN/FROM database_name] [LIKE 'pattern_with_wildcards'];   --僅支持 Hive 2.2.0 +
  1. 查看表的分區(qū)列表
SHOW PARTITIONS table_name;
  1. 查看表/視圖的創(chuàng)建語句

```commonlisp
SHOW CREATE TABLE ([db_name.]table_name|view_name);

六、Hive 常用DML操作

案例分析:

新建分區(qū)表:

  CREATE TABLE emp_ptn(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2)
    )
    PARTITIONED BY (deptno INT)   -- 按照部門編號進行分區(qū)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";

從 HDFS 上加載數(shù)據(jù)到分區(qū)表:

LOAD DATA  INPATH "hdfs://hadoop001:8020/mydir/emp.txt" OVERWRITE  INTO TABLE emp_ptn PARTITION (deptno=20);

emp.txt 文件可在本倉庫的 resources 目錄中下載

加載后表中數(shù)據(jù)如下,分區(qū)列 deptno 全部賦值成 20:
大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

七、查詢結(jié)果插入到表

案例分析:

新建 emp 表,作為查詢對象表

CREATE TABLE emp(
    empno INT,
    ename STRING,
    job STRING,
    mgr INT,
    hiredate TIMESTAMP,
    sal DECIMAL(7,2),
    comm DECIMAL(7,2),
    deptno INT)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
    
 -- 加載數(shù)據(jù)到 emp 表中 這里直接從本地加載
load data local inpath "/usr/file/emp.txt" into table emp;

大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive
為清晰演示,先清空 emp_ptn 表中加載的數(shù)據(jù):

TRUNCATE TABLE emp_ptn;

靜態(tài)分區(qū)演示:從 emp 表中查詢部門編號為 20 的員工數(shù)據(jù),并插入 emp_ptn 表中,語句如下:

INSERT OVERWRITE TABLE emp_ptn PARTITION (deptno=20) 
SELECT empno,ename,job,mgr,hiredate,sal,comm FROM emp WHERE deptno=20;

完成后 emp_ptn 表中數(shù)據(jù)如下:
大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive
動態(tài)分區(qū)演示:

-- 由于我們只有一個分區(qū),且還是動態(tài)分區(qū),所以需要關(guān)閉嚴格默認。因為在嚴格模式下,用戶必須至少指定一個靜態(tài)分區(qū)
set hive.exec.dynamic.partition.mode=nonstrict;

-- 動態(tài)分區(qū)   此時查詢語句的最后一列為動態(tài)分區(qū)列,即 deptno
INSERT OVERWRITE TABLE emp_ptn PARTITION (deptno) 
SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp WHERE deptno=30;

結(jié)果:
大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

八、更新和刪除操作

更新和刪除的語法比較簡單,和關(guān)系型數(shù)據(jù)庫一致。需要注意的是這兩個操作都只能在支持 ACID 的表,也就是事務(wù)表上才能執(zhí)行。

-- 更新
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]

--刪除
DELETE FROM tablename [WHERE expression]

案例分析:

  1. 修改配置

首先需要更改 hive-site.xml,添加如下配置,開啟事務(wù)支持,配置完成后需要重啟 Hive 服務(wù)。

<property>
    <name>hive.support.concurrency</name>
    <value>true</value>
</property>
<property>
    <name>hive.enforce.bucketing</name>
    <value>true</value>
</property>
<property>
    <name>hive.exec.dynamic.partition.mode</name>
    <value>nonstrict</value>
</property>
<property>
    <name>hive.txn.manager</name>
    <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
    <name>hive.compactor.initiator.on</name>
    <value>true</value>
</property>
<property>
    <name>hive.in.test</name>
    <value>true</value>
</property>
  1. 創(chuàng)建測試表

創(chuàng)建用于測試的事務(wù)表,建表時候指定屬性 transactional = true 則代表該表是事務(wù)表。需要注意的是,按照官方文檔 的說明,目前 Hive 中的事務(wù)表有以下限制:

必須是 buckets Table;
僅支持 ORC 文件格式;
不支持 LOAD DATA …語句。

CREATE TABLE emp_ts(  
  empno int,  
  ename String
)
CLUSTERED BY (empno) INTO 2 BUCKETS STORED AS ORC
TBLPROPERTIES ("transactional"="true");
  1. 插入測試數(shù)據(jù)
INSERT INTO TABLE emp_ts  VALUES (1,"ming"),(2,"hong");

插入數(shù)據(jù)依靠的是 MapReduce 作業(yè),執(zhí)行成功后數(shù)據(jù)如下:
大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

  1. 測試更新和刪除
--更新數(shù)據(jù)
UPDATE emp_ts SET ename = "lan"  WHERE  empno=1;

--刪除數(shù)據(jù)
DELETE FROM emp_ts WHERE empno=2;

更新和刪除數(shù)據(jù)依靠的也是 MapReduce 作業(yè),執(zhí)行成功后數(shù)據(jù)如下:
大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

九、查詢結(jié)果寫出到文件系統(tǒng)

5.1 語法
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
  [ROW FORMAT row_format] [STORED AS file_format] 
  SELECT ... FROM ...
  • OVERWRITE 關(guān)鍵字表示輸出文件存在時,先刪除后再重新寫入;
  • 和 Load 語句一樣,建議無論是本地路徑還是 URL 地址都使用完整的;

寫入文件系統(tǒng)的數(shù)據(jù)被序列化為文本,其中列默認由^A 分隔,行由換行符分隔。如果列不是基本類型,則將其序列化為 JSON 格式。其中行分隔符不允許自定義,但列分隔符可以自定義,如下:

-- 定義列分隔符為'\t' 
insert overwrite local directory './test-04' 
row format delimited 
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
select * from src;

5.2 示例
這里我們將上面創(chuàng)建的 emp_ptn 表導(dǎo)出到本地文件系統(tǒng),語句如下:

INSERT OVERWRITE LOCAL DIRECTORY '/usr/file/ouput'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
SELECT * FROM emp_ptn;

導(dǎo)出結(jié)果如下:
大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

十、Hive CLI和Beeline命令行的基本使用

1.1 Help
使用 hive -H 或者 hive --help 命令可以查看所有命令的幫助,顯示如下:
大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive
1.2 交互式命令行
直接使用 Hive 命令,不加任何參數(shù),即可進入交互式命令行。

1.3 執(zhí)行SQL命令
在不進入交互式命令行的情況下,可以使用 hive -e 執(zhí)行 SQL 命令。

hive -e 'select * from emp';

大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive
1.4 執(zhí)行SQL腳本
用于執(zhí)行的 sql 腳本可以在本地文件系統(tǒng),也可以在 HDFS 上。

# 本地文件系統(tǒng)
hive -f /usr/file/simple.sql;

# HDFS文件系統(tǒng)
hive -f hdfs://hadoop001:8020/tmp/simple.sql;
其中 simple.sql 內(nèi)容如下:

select * from emp;

1.5 配置Hive變量

可以使用 --hiveconf 設(shè)置 Hive 運行時的變量。

hive -e 'select * from emp' \
--hiveconf hive.exec.scratchdir=/tmp/hive_scratch  \
--hiveconf mapred.reduce.tasks=4;

hive.exec.scratchdir:指定 HDFS 上目錄位置,用于存儲不同 map/reduce 階段的執(zhí)行計劃和這些階段的中間輸出結(jié)果。

1.6 配置文件啟動

使用 -i 可以在進入交互模式之前運行初始化腳本,相當(dāng)于指定配置文件啟動。

hive -i /usr/file/hive-init.conf;
其中 hive-init.conf 的內(nèi)容如下:

set hive.exec.mode.local.auto = true;

hive.exec.mode.local.auto 默認值為 false,這里設(shè)置為 true ,代表開啟本地模式。

1.7 用戶自定義變量
–define <key=value> 和 --hivevar <key=value> 在功能上是等價的,都是用來實現(xiàn)自定義變量,這里給出一個示例:

定義變量:

hive  --define  n=ename --hiveconf  --hivevar j=job;

在查詢中引用自定義變量:

# 以下兩條語句等價
hive > select ${n} from emp;
hive >  select ${hivevar:n} from emp;

# 以下兩條語句等價
hive > select ${j} from emp;
hive >  select ${hivevar:j} from emp;

大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

十一、Hive配置

可以通過三種方式對 Hive 的相關(guān)屬性進行配置,分別介紹如下:

3.1 配置文件
方式一為使用配置文件,使用配置文件指定的配置是永久有效的。Hive 有以下三個可選的配置文件:

  • hive-site.xml :Hive 的主要配置文件;
  • hivemetastore-site.xml: 關(guān)于元數(shù)據(jù)的配置;
  • hiveserver2-site.xml:關(guān)于 HiveServer2 的配置。

示例如下,在 hive-site.xml 配置 hive.exec.scratchdir:

 <property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/mydir</value>
    <description>Scratch space for Hive jobs</description>
  </property>

3.2 hiveconf
方式二為在啟動命令行 (Hive CLI / Beeline) 的時候使用 --hiveconf 指定配置,這種方式指定的配置作用于整個 Session。

hive --hiveconf hive.exec.scratchdir=/tmp/mydir

3.3 set
方式三為在交互式環(huán)境下 (Hive CLI / Beeline),使用 set 命令指定。這種設(shè)置的作用范圍也是 Session 級別的,配置對于執(zhí)行該命令后的所有命令生效。set 兼具設(shè)置參數(shù)和查看參數(shù)的功能。如下:

0: jdbc:hive2://hadoop001:10000> set hive.exec.scratchdir=/tmp/mydir;
No rows affected (0.025 seconds)
0: jdbc:hive2://hadoop001:10000> set hive.exec.scratchdir;
+----------------------------------+--+
|               set                |
+----------------------------------+--+
| hive.exec.scratchdir=/tmp/mydir  |
+----------------------------------+--+

3.4 配置優(yōu)先級

配置的優(yōu)先順序如下 (由低到高):
hive-site.xml - >hivemetastore-site.xml- >hiveserver2-site.xml - >-- hiveconf- > set文章來源地址http://www.zghlxwxcb.cn/news/detail-429654.html

到了這里,關(guān)于大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包