--spark啓動sql
spark-sql
--退出數據庫
spark-sql> quit; --退出spark-sql
orapache
spark-sql> exit;
一、查看已有的databaseui
show databases; --切換數據庫 use databaseName;
二、建立數據庫spa
create database myDatabase;
三、登陸數據庫myDatabase;unix
use myDatabase
四、查看已有的table code
show tables; -- 查看全部表 show tables 'KHDX'; -- 支持模糊查詢,表名包含KHDX
五、建立表orm
--建表: 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;
六、顯示錶結構blog
desc khdx_hy; -- 顯示錶khdx_hy的表結構 desc formatted khdx_hy; -- 格式化表khdx_hy的表結構信息,信息更詳細,包括在hdfs的存儲位置 show partitions khdx_hy; -- 顯示錶khdx_hy的分區信息 show create table khdx_hy; -- 查看建表語句
七、修改表結構utf-8
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'); --刪除某分區
八、操做表
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
九、分區操做
--增長分區: 更完善寫法: 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;