天天看點

大資料 - spark-sql 常用指令

--spark啟動

spark-sql      
大資料 - spark-sql 常用指令

 --退出

spark-sql> quit;     --退出spark-sql      
大資料 - spark-sql 常用指令

or

spark-sql> exit;      
大資料 - spark-sql 常用指令

1、檢視已有的database

show databases;
--切換資料庫
use databaseName;      

2、建立資料庫

create database myDatabase;      

3、登入資料庫myDatabase;

use myDatabase      

4、檢視已有的table 

show tables;  -- 檢視所有表
show tables 'KHDX'; -- 支援模糊查詢,表名包含KHDX      

5、建立表

--建表:
create table tab_test(
name string,
age int,
num1 double,
num2 bigint,
msg varchar(80)    --最後一個字段後面不能有  ','  号
)
partitioned by (p_age int,p_name string) --分區資訊
row format delimited fields terminated by ',' --資料中,屬性間用逗号分隔
stored as textfile location '/tab/test/tab_test';  --儲存路徑,最後也可帶'/' 即寫成 '/tab/test/tab_test/'

-- stored as orc ;orc類型的表,手動推資料(txt / csv 檔案;無需表頭,行尾無需',',資料檔案儲存為unix utf-8 無bom格式)不行;
--可以借助textfile類型的臨時表插入資料;插入時,要注意字段順序對應一緻。      
--指定分區,追加插入;最好不要用 'seletc *  ' 表字段變化時,*指代的内容不一樣
insert into table tab_test_orc partition(p_age=10,p_name='lucy') select name,age,num1,num2,msg from tab_test_temp;
--指定分區,覆寫插入
insert overwrite table tab_test_orc partition(p_age=10,p_name='lucy') select name,age,num1,num2,msg from tab_test_temp;      

6、顯示表結構

desc khdx_hy;   -- 顯示表khdx_hy的表結構
desc formatted khdx_hy; -- 格式化表khdx_hy的表結構資訊,資訊更詳細,包括在hdfs的存儲位置
show partitions khdx_hy; -- 顯示表khdx_hy的分區資訊
show create table khdx_hy; -- 檢視建表語句      

7、修改表結構

alter table myDatabase.nbzz_ckmxz add partition(tjrq='20171231')add partition(tjrq='20180101')  -- 手動給分區表增加2個分區
alter table myDatabase.nbzz_ckmxz drop if exists partition (tjrq='20171231');   -- 手動删除分區表某個分區
alter table myDatabase.nbzz_ckmxz add columns (fh string);     -- 追加字段
alter table myDatabase.nbzz_ckmxz change hydh hydh1 string;          -- 修改字段hydh名稱為hydh1,類型為string


drop table myDatabase.nbzz_ckmxz;  -- 删除表
alter table myDatabase.tmp_nbzz_ckmxz rename to myDatabase.nbzz_ckmxz;  -- 重命名表      
--删表中資料:
truncate table tab_test;   --執行後,分區依然存在
truncate table tab_test partition(p_age=10,p_name='Tom'); --删除某分區       

8、操作表

select * from myDatabase.khdx_hy order by hydh limit 10;    -- 查詢表,顯示前10條記錄。
truncate table khdx_hy;      -- 清空表資料
insert overwrite table myDatabase.tmp_khdx_hy select * from myDatabase.khdx_hy;  -- 用khdx_hy的資料覆寫tmp_khdx_hy資料;
insert into myDatabase.tmp_khdx_hy select * from myDatabase.khdx_hy;   -- 用khdx_hy的資料追加tmp_khdx_hy資料中,不覆寫原來資料。
load data local inpath '/home/myDatabase/data/org_info.txt' overwrite into table myDatabase.org_info ;  -- 從檔案中導入資料到表中
load data local inpath '/home/myDatabase/data/t_ma_fct_etl_acct_liyang_20171231.dat' overwrite into table myDatabase.T_MA_FCT_ETL_ACCT partition(tjrq="20171231");
 -- 從檔案導入資料至表的某個分區。
insert overwrite local directory '/home/myDatabase/data/khdx_hy.txt'  row format delimited  fields terminated by '\t' select * FROM myDatabase.KHDX_HY;
 -- 從表khdx_hy導出資料至本地檔案khdx_hy.txt      

9、分區操作

--增加分區:
 更完善寫法: alter table tab_test add if not exists partition(p_age=11,p_name="Tom");

 alter table tab_test add partition(p_age=10,p_name='Tom'); --需要指定所有的分區,不能隻是p_age或p_name;否則org.apache.spark.sql.execution.QueryExecutionException:doesn't contain all (2) partition columns 
--檢視分區: show partitions tab_test; 
0: jdbc:hive2://vmax32:18000> show partitions tab_test; 
+----------------------+ | result | +----------------------+ |
 p_age=10/p_name=Tom | +----------------------+ 1 row selected (0.083 seconds) 
--删除分區
 alter table tab_test drop if exists partition(p_age=10); 
--删除分區時,可以隻指定局部 
alter table tab_test drop partition(p_name='Tom'); 
--隻執行該條語句,p_age=10分區連同一起被删掉,show partitions 結果為空;hdfs dfs -ls 也看不到 p_age=10的分區

alter table tab_test add partition(p_age=10,p_name='cat'); 
--隻drop p_name='Tome', p_name='cat' 的分區還存在,show partitions 可以查到


--動态分區;動态分區比對最後選出的字段;隻與字段順序有關系,與名字無關;同時存在靜态和動态分區,動态分區必須在靜态分區之後
insert into table tab_test(p_age,p_name)
select name,
       age,
       num1,
       num2,
       msg,
       age as pppp_age,  --取不取别名都可以;分區需要出現在select出來的字段的最後位置,為了比對。
       name as p_name   --寫個對應的别名,看上去好了解一點
from tab_test_temp;
       

轉載于:https://www.cnblogs.com/BlueSkyyj/p/9640626.html