spark-sql 转自
spark启动
spark-sql
退出
spark-sql> quit; --退出spark-sql
或者
spark-sql> exit;
查看已有的database
show databases;
--切换数据库
use databaseName;
创建数据库
create database myDatabase;
登录数据库myDatabase;
use myDatabase
查看已有的table
show tables; -- 查看所有表
show tables 'KHDX'; -- 支持模糊查询,表名包含KHDX
创建表
create EXTERNAL TABLE IF NOT EXISTS 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/'
-- EXTERNAL TABLE IF NOT EXISTS 推荐
-- 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;
显示表结构
desc khdx_hy; -- 显示表khdx_hy的表结构
desc formatted khdx_hy; -- 格式化表khdx_hy的表结构信息,信息更详细,包括在hdfs的存储位置
show partitions khdx_hy; -- 显示表khdx_hy的分区信息
show create table khdx_hy; -- 查看建表语句
修改表结构
alter table myDatabase.nbzz_ckmxz add if not exists 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'); --删除某分区 中数据
文件导出/导入数据
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 drop if exists partition(p_age=10);
--删除分区时,可以只指定局部
alter table tab_test drop partition(p_name='Tom');
--动态分区;动态分区匹配最后选出的字段;只与字段顺序有关系,与名字无关;同时存在静态和动态分区,动态分区必须在静态分区之后
insert into table tab_test partition(p_age,p_name)(
select name,
age,
num1,
num2,
msg,
age as pppp_age, --取不取别名都可以;分区需要出现在select出来的字段的最后位置,为了匹配。
name as p_name --写个对应的别名,看上去好理解一点
from tab_test_temp);
CREATE EXTERNAL TABLE IF NOT EXISTS xxxx(
prod_line_code string COMMENT 'xx',
prod_line string COMMENT 'xx',
sss bigint COMMENT 'xx'
) partitioned by (statisc_date string) STORED AS parquet
LOCATION '/x/u';
INSERT
OVERWRITE TABLE xxxx partition(statisc_date) (
select
'' as prod_line_no,
'' as prod_line,
0 as sss,
'2020-01-01' as statisc_date
from
yyyyyy t
)
Hive -- 保留小数位数
方法一
select round(645342.875645342,2);
+------------+--+
| _c0 |
+------------+--+
| 645342.88 |
+------------+--+
方法二
select cast(645342.875645342 as decimal(10,2))
. . . . . . . . . . . . . . . . . . . .> ;
+------------+--+
| _c0 |
+------------+--+
| 645342.88 |
+------------+--+
网友评论