⑴ Hive 資料庫表的基本操作,必須掌握的基本功
說明:hive 的表存放位置模式是由 hive-site.xml 當中的一個屬性指定的,默認是存放在該配置文件設置的路徑下,也可在創建資料庫時單獨指定存儲路徑。
資料庫有一些描述性的屬性信息,可以在創建時添加:
查看資料庫的鍵值對信息
修改資料庫的鍵值對信息
與mysql查詢語句是一樣的語法
刪除一個空資料庫,如果資料庫下面有數據表,那麼就會報錯
強制刪除資料庫,包含資料庫下面的表一起刪除(請謹慎操作)
[]里的屬性為可選屬性,不是必須的,但是如果有可選屬性,會使 sql 語句的易讀性更好,更標准與規范。
例如:[comment '欄位注釋信息'][comment '表的描述信息']等,[external]屬性除外
1. CREATE TABLE
創建一個指定名字的表,如果相同名字的表已存在,則拋出異常提示:表已存在,使用時可以使用IF NOT EXISTS語句來忽略這個異常。
如果創建的表名已存在,則不會再創建,也不會拋出異常提示:表已存在。否則則自動創建該表。
2. EXTERNAL
顧名思義是外部的意思,此關鍵字在建表語句中讓使用者可以創建一個外部表,如果不加該關鍵字,則默認創建內部表。
外部表在創建時必須同時指定一個指向實際數據的路徑(LOCATION),Hive在創建內部表時,會將數據移動到數據倉庫指向的路徑;
若創建外部表,僅記錄數據所在的路徑,不對數據的位置作任何改變。
內部表在刪除後,其元數據和數據都會被一起刪除。
外部表在刪除後,只刪除其元數據,數據不會被刪除。
3. COMMENT
用於給表的各個欄位或整張表的內容作解釋說明的,便於他人理解其含義。
4. PARTITIONED BY
區分表是否是分區表的關鍵欄位,依據具體欄位名和類型來決定表的分區欄位。
5. CLUSTERED BY
依據column_name對表進行分桶,在 Hive 中對於每一張表或分區,Hive 可以通過分桶的方式將數據以更細粒度進行數據范圍劃分。Hive採用對列值哈希,然後除以桶的個數求余的方式決定該條記錄存放在哪個桶當中。
6. SORTED BY
指定表數據的排序欄位和排序規則,是正序還是倒序排列。
7. ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
指定表存儲中列的分隔符,這里指定的是' ',也可以是其他分隔符。
8. STORED AS SEQUENCEFILE|TEXTFILE|RCFILE
指定表的存儲格式,如果文件數據是純文本格式,可以使用STORED AS TEXTFILE,如果數據需要壓縮,則可以使用STORED AS SEQUENCEFILE。
9. LOCATION
指定 Hive 表在 hdfs 里的存儲路徑,一般內部表(Managed Table)不需要自定義,使用配置文件中設置的路徑即可。
如果創建的是一張外部表,則需要單獨指定一個路徑。
1. 使用create table語句創建表
例子:
2. 使用create table ... as select...語句創建表
例子:
使用 create table ... as select ...語句來創建新表sub_student,此時sub_student 表的結構及表數據與 t_student 表一模一樣, 相當於直接將 t_student 的表結構和表數據復制一份到 sub_student 表。
注意:
(1). select 中選取的列名(如果是 * 則表示選取所有列名)會作為新表 sub_student 的列名。
(2). 該種創建表的方式會改變表的屬性以及結構,例如不能是外部表,只能是內部表,也不支持分區、分桶。
如果as select後的表是分區表,並且使用select *,則分區欄位在新表裡只是作為欄位存在,而不是作為分區欄位存在。
在使用該種方式創建時,create 與 table 之間不能加 external 關鍵字,即不能通過該種方式創建外部目標表,默認只支持創建內部目標表。
(3). 該種創建表的方式所創建的目標表存儲格式會變成默認的格式textfile。
3.使用like語句創建表
例子:
注意:
(1). 只是將 t_student 的表結構復制給 sub1_student 表。
(2). 並不復制 t_student 表的數據給 sub1_student 表。
(3). 目標表可以創建為外部表,即:
⑵ spark、hive、impala、hdfs的常用命令
對spark、hive、impala、hdfs的常用命令作了如下總結,歡迎大家補充! 1. Spark的使用: 以通過SecureCRT訪問IP地址:10.10.234.198 為例進行說明: 先輸入:ll //查詢集群是否裝有spark >su - mr >/home/mr/spark/bin/beeline -u "jdbc:hive2:/bigdata198:18000/" -n mr -p "" >.show databases; //顯示其中資料庫,例如 >use bigmax; //使用資料庫bigmax >show tables; //查詢目錄中所有的表 >desc formatted TableName; //顯示表的詳細信息,包括分區、欄位、地址等信息 >desc TableName; //顯示表中的欄位和分區信息 >select count(*) from TableName; //顯示表中數據數量,可以用來判斷表是否為空 >drop table TableName; //刪除表的信息 >drop bigmax //刪除資料庫bigmax >describe database zxvmax //查詢資料庫zxvmax信息 創建一個表 第一步: >create external table if not exists lte_Amaze //創建一個叫lte_Amaze的表 ( //括弧中每一行為表中的各個欄位的名稱和其所屬的數據類型,並用空格隔開 DateTime String, MilliSec int, Network int, eNodeBID int, CID int, IMSI String, DataType int, AoA int, ServerRsrp int, ServerRsrq int, TA int, Cqi0 Tinyint, Cqi1 Tinyint //注意,最後一個欄位結束後,沒有逗號 ) partitioned by (p_date string, p_hour INT) //以p_date和p_hour作為分區 row format delimited fields terminated by ',' /*/*表中行結構是以逗號作為分隔符,與上邊的表中欄位以逗號結尾相一致*/ stored as textfile; //以文本格式進行保存 第二步:添加分區,指定分區的位置 >alter table lte_Amaze add partition (p_date='2015-01-27',p_hour=0) location'/lte/nds/mr/lte_nds_cdt_uedetail/p_date=2015-01-27/p_hour=0'; //添加lte_Amaze表中分區信息,進行賦值。 //並制定分區對應目錄/lte/nds/mr下表lte_nds_cdt_uedetail中對應分區信息 第三步:察看添加的結果 >show partitions lte_Amaze; //顯示表的分區信息 2. hdfs使用: #su - hdfs //切換到hdfs用戶下 、 #hadoop fs –ls ///查看進程 # cd /hdfs/bin //進入hdfs安裝bin目錄 >hadoop fs -ls /umtsd/cdt/ //查詢/umtsd/cdt/文件目錄 >hadoop fs -mkdir /umtsd/test //在/umtsd目錄下創建test目錄 >hadoop fs -put /home/data/u1002.csv /impala/data/u5002 //將home/data/u1002.csv這個文件put到hdfs文件目錄上。put到hdfs上的數據文件以逗號「,」分隔符文件(csv),數據不論類型,直接是數據,沒有雙引號和單引號 >hadoop fs -rm /umtsd/test/test.txt //刪除umtsd/test目錄下的test.txt文件 >hadoop fs -cat /umtsd/test/test.txt //查看umtsd/test目錄下的test.txt文件內容3hive操作使用: #su - mr //切換到mr用戶下 #hive //進入hive查詢操作界面 hive>show tables; //查詢當前創建的所有表 hive>show databases; //查詢當前創建的資料庫 hive>describe table_name; {或者desc table_name}//查看錶的欄位的定義和分區信息,有明確區分(impala下該命令把分區信息以欄位的形式顯示出來,不怎麼好區分) hive> show partitions table_name; //查看錶對應數據現有的分區信息,impala下沒有該命令 hive> quit;//退出hive操作界面 hive>desc formatted table_name; 查看錶結構,分隔符等信息 hive> alter table ceshi change id id int; 修改表的列數據類型 //將id數據類型修改為int 注意是兩個id hive> SHOW TABLES '.*s'; 按正條件(正則表達式)顯示表, [mr@aico ~]$ exit; 退出mr用戶操作界面,到[root@aico]界面impala操作使用: #su - mr //切換到mr用戶下 #cd impala/bin //進入impala安裝bin目錄 #/impala/bin> impala-shell.sh -i 10.10.234.166/localhost //進入impala查詢操作界面 [10.10.234.166:21000] >show databases; //查詢當前創建的資料庫 [10.10.234.166:21000] >use database_name; //選擇使用資料庫,默認情況下是使用default資料庫 [10.10.234.166:21000] > show tables; //查詢當前資料庫下創建的所有表 [10.10.234.166:21000] >describe table_name; //查看錶的欄位的定義,包括分區信息,沒有明確區分 [10.10.234.166:21000] > describe formatted table_name; //查看錶對應格式化信息,包括分區,所屬資料庫,創建用戶,創建時間等詳細信息。 [10.10.234.166:21000] >refresh table_name; //刷新一下,保證元數據是最新的 [10.10.234.166:21000] > alter TABLE U107 ADD PARTITION(reportDate="2013-09-27",rncid=487)LOCATION '/umts/cdt/ MREMITABLE/20130927/rncid=487' //添加分區信息,具體的表和數據的對應關系 [10.10.234.166:21000] > alter TABLE U100 drop PARTITION(reportDate="2013-09-25",rncid=487); //刪除現有的分區,數據與表的關聯 [10.10.234.166:21000] >quit; //退出impala操作界面[mr@aicod bin]$ impala-shell; 得到welcome impala的信息,進入impala 查詢操作界面 [aicod:21000] > 按兩次tab鍵,查看可以用的命令 alter describe help profile shell values connect drop history quit show version create exit insert select unset with desc explain load set use⑶ hive中怎麼退出所連接的資料庫
1、hive 命令行模式,直接輸入/hive/bin/hive的執行程序,或者輸入 hive --service cli
用於linux平台命令行查詢,查詢語句基本跟mysql查詢語句類似
2、 hive web界面的 (埠號9999) 啟動方式
hive –service hwi &
用於通過瀏覽器來訪問hive,感覺沒多大用途
⑷ 在hive資料庫中怎麼查看錶結構
查看錶結構信息如下
1、descformattedtable_name;
2、desctable_name。