大数据 - spark-sql 常用命令
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据 - spark-sql 常用命令相关的知识,希望对你有一定的参考价值。
--spark启动
spark-sql
--退出
spark-sql> quit; --退出spark-sql
or
spark-sql> exit;
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;
以上是关于大数据 - spark-sql 常用命令的主要内容,如果未能解决你的问题,请参考以下文章
Spark-Sql整合hive,在spark-sql命令和spark-shell命令下执行sql命令和整合调用hive
14.4 Spark-SQL基于Cassandra数据分析编程实例
14.3 Spark-SQL基于PostgreSQL数据分析编程实例
Oracle 数据库 - 使用UEStudio修改dmp文件版本号,解决imp命令恢复的数据库与dmp本地文件版本号不匹配导致的导入失败问题,“ORACLE error 12547”问题处理(代码片段