sprak-sql-01-基础

sql语言分为四类
1.数据查询语言DQL (查询语句)
2.数据操纵语言DML (删除、创建、更新)
3.数据定义语言DDL (创建数据库中的各种对象—–表、视图、索引、同义词、聚簇)
4.数据控制语言DCL (数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视)
  4.1-> GRANT:授权。
  4.2-> REVOKE:撤销授权。
4.3-> ROLLBACK
4.3-> COMMIT
提交数据有三种类型:显式提交、隐式提交及自动提交。下面分别说明这三种类型。 
(1) 显式提交 
用COMMIT命令直接完成的提交为显式提交。其格式为: 
  SQL>COMMIT; 
(2) 隐式提交 
用SQL命令间接完成的提交为隐式提交。这些命令是: 
  ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。 
(3) 自动提交 
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。其格式为:SQL>SET AUTOCOMMIT ON;


什么是sql?
1.在没有sql之前人肉工作:1.自己写标准的格式文件,自己放到规定的目录下,然后把文件的主要分类信息保存起来方便查找,但是当文件越来越大,工作效率极为低下
2.出现来sql,有表、表有表头、有列、有元数据,表的名称是虚拟的,其实from table_name 找的就是元数据,元数据记录着文件存储的地址。我们可以通过sql解析文件




spark基础

sql 字符串 -> dataset 对rdd的一个包装(优化器) -> 只有RDD才能触发DAGScheduler

pom:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.3.4</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.3.4</version>
</dependency>



// spark基础 def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local").setAppName("spark_sql") val session = SparkSession.builder().config(conf).getOrCreate() val sc = session.sparkContext sc.setLogLevel("ERROR") val databases: Dataset[Database] =
session.catalog.listDatabases() databases.show()

+-------+----------------+--------------------+
| name| description| locationUri|
+-------+----------------+--------------------+
|default|default database|file:/D:/code/sca...|
+-------+----------------+--------------------+



    val tables = session.catalog.listTables()
    tables.show()

+----+--------+-----------+---------+-----------+
|name|database|description|tableType|isTemporary|
+----+--------+-----------+---------+-----------+
+----+--------+-----------+---------+-----------+



    val functions = session.catalog.listFunctions()
    functions.show(10,true)
  }

+----+--------+-----------+--------------------+-----------+
|name|database|description| className|isTemporary|
+----+--------+-----------+--------------------+-----------+
| !| null| null|org.apache.spark....| true|
| %| null| null|org.apache.spark....| true|
| &| null| null|org.apache.spark....| true|
| *| null| null|org.apache.spark....| true|
| +| null| null|org.apache.spark....| true|
| -| null| null|org.apache.spark....| true|
| /| null| null|org.apache.spark....| true|
| <| null| null|org.apache.spark....| true|
| <=| null| null|org.apache.spark....| true|
| <=>| null| null|org.apache.spark....| true|
+----+--------+-----------+--------------------+-----------+
only showing top 10 rows

 

val dataFrame = session.read.json("data/bigdata-spark_data_json.txt")
dataFrame.show()
// 现象:项目目录下多了空文件夹spark-warehouse,原因是没有开启enableHiveSupport,导致元数据存不进去

+----+---------+
| age| name|
+----+---------+
| 20| zhangsan|
|null| lisi|
| 18| wangwu|
| 21| a|
| 20|zhangsan1|
|null| lisi1|

only showing top 20 rows

dataFrame.printSchema()

root
|-- age: long (nullable = true)
|-- name: string (nullable = true)

 
// dataFrame向catalog中注册表名
dataFrame.createTempView("temp_table_name")
val frame: DataFrame = session.sql("select name from temp_table_name")
frame.show()



+---------+
| name|
+---------+
| zhangsan|
| lisi|
| wangwu|
| a|
|zhangsan1|
| lisi1|

only showing top 20 rows


session.catalog.listTables().show()

+---------------+--------+-----------+---------+-----------+
| name|database|description|tableType|isTemporary|
+---------------+--------+-----------+---------+-----------+
|temp_table_name| null| null|TEMPORARY| true|
+---------------+--------+-----------+---------+-----------+




模仿客户端请求,控制台输入sql,模仿客户行为

  import scala.io.StdIn._

    while(true){
      val sql: String = readLine("input your sql: ")

      session.sql(sql).show()
    }
原文地址:https://www.cnblogs.com/bigdata-familyMeals/p/14490215.html