SparkSql常用語句


-連接sparksql: cd /home/mr/spark/bin   ./beeline   !connect jdbc:hive2://hostname:port --切換數據庫
use databaseName; --建表:
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; 查看表字段、結構: select * from tab_test;   --分區字段也會被選出來
+-------+------+-------+-------+------+--------+---------+
| name  | age  | num1  | num2  | msg  | p_age  | p_name  |
+-------+------+-------+-------+------+--------+---------+
+-------+------+-------+-------+------+--------+---------+
desc tab_test; 0: jdbc:hive2://vmax32:18000> desc tab_test; +--------------------------+--------------+----------+
|         col_name         |  data_type   | comment  |
+--------------------------+--------------+----------+
| name                     | string       | NULL     |
| age                      | int          | NULL     |
| num1                     | double       | NULL     |
| num2                     | bigint       | NULL     |
| msg                      | varchar(80)  | NULL     |
| p_age                    | int          | NULL     |
| p_name                   | string       | NULL     |
| # Partition Information  |              |          |
| # col_name               | data_type    | comment  |
| p_age                    | int          | NULL     |
| p_name                   | string       | NULL     |
+--------------------------+--------------+----------+
desc formatted tab_test;  --更詳細地查看表結構;hdfs保存位置
+------------------------------------------------------------------------------------+
|                                       result                                       |
+------------------------------------------------------------------------------------+
| # col_name                    data_type               comment                                |
|                                                                                               |
| name                  string                                                           |
| age                   int                                                              |
| num1                  double                                                           |
| num2                  bigint                                                           |
| msg                   varchar(80)                                                      |
|                                                                                               |
| # Partition Information                                                                        |
| # col_name                    data_type               comment                                |
|                                                                                               |
| p_age                 int                                                              |
| p_name                string                                                           |
|                                                                                               |
| # Detailed Table Information                                                              |
| Database:             zxvmax                                                           |
| Owner:                mr                                                               |
| CreateTime:           Fri Aug 12 11:02:35 CST 2016                                     |
| LastAccessTime:       UNKNOWN                                                          |
| Protect Mode:         None                                                             |
| Retention:            0                                                                |
| Location:             hdfs://vmax53:9000/tab/test/tab_test                             |
| Table Type:           MANAGED_TABLE                                                    |
| Table Parameters:                                                                            |
|       transient_lastDdlTime   1470970955                                                  |
|                                                                                               |
| # Storage Information                                                                    |
| SerDe Library:        org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe                 |
| InputFormat:          org.apache.hadoop.mapred.TextInputFormat                             |
| OutputFormat:         org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat         |
| Compressed:           No                                                               |
| Num Buckets:          -1                                                               |
| Bucket Columns:       []                                                               |
| Sort Columns:         []                                                               |
| Storage Desc Params:                                                                      |
|       field.delim             ,                                                            |
|       serialization.format    ,                                                            |
+------------------------------------------------------------------------------------+
37 rows selected (0.12 seconds) --刪表:
drop table if exists tab_test;  --該表分區也會被刪除

--刪表中數據:
truncate table tab_test;   --執行后,分區依然存在
truncate table tab_test partition(p_age=10,p_name='Tom'); --刪除某分區 

--增加分區:
 更完善寫法: 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; 附hdfs相關操作命令--切換到hdfs用戶
 su hdfs --查看hdfs下文件或目錄
 hdfs dfs -ls /tab/test hadoop hdfs -ls /tab/test --手動推數據到spark表的某個分區(分區不存在的時候,先alter table xxx add partition ……) 沒有分區的spark表,直接put到表目錄下即可查到數據
 hdfs dfs -put /home/tab_test.csv /tab/test/p_age=10/p_name=Tom --hdfs創建目錄
 hdfs dfs -mkdir /tab/test/tab_test/p_age=11 --建立p_age分區后,show partitions看不到
 hdfs dfs -mkdir /tab/test/tab_test/p_age=11/p_name=jack --繼續建立p_name分區,show partitions 依然無法看到
 hdfs文件系統操作指令,類似linux上文件目錄操作 --sparkSql另一種連接方式
/home/mr/spark/bin/beeline -u "jdbc:hive2://hostName:port/" -n mr -p ""

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM