SQL 语法--表特定语句--create、insert、desc | 学习笔记

简介: 快速学习 SQL 语法--表特定语句--create、insert、desc

开发者学堂课程【大数据Impala教程SQL 语法--表特定语句--create、insert、desc学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/722/detail/12893


SQL 语法--表特定语句--create、insert、desc


内容介绍:

一、create table 语句

二、insert 语句

三、查询语句


一、create table 语句

1.概括

学习 impala 语法中跟表相关的特定语句。操作表相关的语句整体来看,跟 hive 的 SQL 语句类似。甚至在底层语法层面,包括指定分割符,指定路径,内部表等等,都跟 hive 一模一样,这点不用担心,直接把 hive 语法套过来使用。

2.创建表语句

语法以及当中有哪些重点需要注意的事项。第一个是 cerate table 创建表语句。在 impala 中创建的表分为两大块,第一块叫做内部表,默认路径会在 hive 的数仓下面,第二块可以指定路径,需要注意,当指定路径通过 location 创建时,要注意指定路径 impala 权限问题。指定一个路径在根目录下另外一个文件夹中。impala 默认以 impala 用户访问。如果没有权限,会有权限不足的问题,需要特别注意的。impala 中支持的数据类型和 hive 类似,除了标准的 SQL 类型,还支持 Java 类型。且大小写不敏感。在 impala 当下的版本中,已经支持了复合类型。想要知道当下 impala 支持是哪些类型。

3.操作

打开 impala shell 客户端,创建一个表 createtabletable t_test1(id int,hobby,arrarrry<string>)故意写错后回车,会报错类型不对。

image.png

下面做了一个提示,期望的类型有这些 array,bigint,Boolean,struct 等。这一块和 hive 非常类似。如果不加 if not exists 会报错,加了就不会。在默认情况下,创建的表位于的路径跟 hive 一模一样。在 user/hive/warehouse/my_db.db/student 下,以数据库名加上表名的形式存在。


二、insert 语句

1.概括

第二个语句叫 insert 语句,在 impala 当中用得比较多。在 hive 中很难去 insert 语句。执行一个 insert 中,底层会跑一个程序,这个效率是极其慢的。hive 中倡导使用命令加载、映射数据。但是 impala 底层不是执行语句,可以像关系型数据库那样,对大量的语句进行 insert 操作,整个 insert 语法有两个子句:into 和 overwrite。into 用于插入新纪录数据,overwrite 用于覆盖已有的记录。

2.演示

在 hive 中 show database,切换同一个数据库,同时使用 impala 数据库,创建一个表 create table,在 impala 中创立 create table t_test1(id int,name string)创建表后,如果有特殊需求,k也可以指定表中的分割符。在 insert into table t_test1 values(1,“zhangsan”);回车可以看见是3.93秒的操作,

image.png

接下来复制到 hive 中进行执行。改名为 test2 回车,

image.png

同样把 insert 语句放入 hive 中执行,效率会变慢。可以进入 hive 中看到程序在跑。说明在底层,hive 如果采用 insert 语法会非常慢。在 impala 中使用这种语法则会非常快。在进行操作时,有一个表后面的字段可以省去不写。前提是保证后面插入的确保值的顺序和表中列的顺序一致。

3.举个例子

(1)create into employee id INT,name STRING, age INT,address STRING,salary BIGINT

复制进行操作。创建一个表,叫做 employee,里面有(id INT,name STRING, age INT,address STRING,salary BIGINT)这些字段。创建好之后,截取插入记录类似于 insert into employee values2'Khilan'25'Delhi'15000),再插入相似记录。select * from employee,速度非常快。

(2)     如果第三条记录插入,不再使用 insert into 插入,而是 insert overwrite,已知 overwrite 会覆盖已有记录。插入第三条记录后发现记录全部消失。因此,overwrite 要慎用。这样就完成了表的插入语句。也是 impala 中特有的插入表的方式。因为底层执行速度很快。

(3)默认情况下,创建的表插入语句都没有指定分割符。打开 node-1 ,来到 hive 的默认路径下,在 user/hive/warehouse/impala.dbemployee impala 插入表的数据。下载这里面的相关数据,打开文件发现数据中就是刚刚插入的表的数据。但是分割符不是所看见的。因此,impala hive 的性质十分相似。文件名字不像 M 码的名字,侧面看出 impala 底层并不是 M 码程序。而 test2底层的文件就比较有规则。以上是没有指定分割符。如果想要有指定分割符,进行如下演示。创建一个表 create table t_test3id intname string)指定分割符 row format delimited fields terminated by “,”;这样就相当于指定分割符为逗号,如果是复合类型,也可以指定集合元素之间的换行符。再通过 insert into table 更改信息插入执行,用 select 查询,再验证。download 下来发现指定分割符不再是指定的符号。因此,跟 hive 在底层来看完全一致。只不过一个通过 M 码程序运行算出来,另一个通过 C++程序运行算出。


三、查询语句

1.select 语句

可以从表中进行字段的提取,如果是全表的字段,还可以指定列。

2.describe 语句

该语法可以帮助查看表的相关信息。

(1)举例

例如,刚入职一家公司,接手了 impala 数据库,打开之后看到有很多表。好奇表中有哪些字段,哪些信息,可快速用该语法查看信息。在 hive 中的 desc 是简写,针对表查询信息会非常清晰,属于哪个数据库,时间,路径,读取数据的分割符等都能查看。

(2)操作

将命令复制到 impala 进行回车发现,找不到 t_test2,说明在 hive 中创建的表默认不能更新。此时可以用 invalidate metadata 执行,再 show tables 就有了 test2 。将 hive 语法复制到 impala 执行回车,结果相同,说明 impala hive 共用同一套元数据。当下脱离了 hive impala也完成不了。因此,除了使用本身的 describe,还能使用 desc formated,这样查看表的元数据信息会更加清晰。

相关文章
|
11天前
|
SQL 存储 关系型数据库
SQL `CREATE DATABASE` 语法
【11月更文挑战第10天】
33 3
|
16天前
|
SQL 关系型数据库 数据库
sql语法
【10月更文挑战第26天】sql语法
27 5
|
24天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
1月前
|
SQL 存储 关系型数据库
mysql SQL必知语法
本文详细介绍了MySQLSQL的基本语法,包括SELECT、FROM、WHERE、GROUPBY、HAVING、ORDERBY等关键字的使用,以及数据库操作如创建、删除表,数据类型,插入、查询、过滤、排序、连接和汇总数据的方法。通过学习这些内容,读者将能更好地管理和操
13 0
|
1月前
|
SQL 关系型数据库 MySQL
Mysql(2)—SQL语法详解
SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准编程语言。它主要用于数据的查询、插入、更新和删除等操作。SQL最初在1970年代由IBM的研究人员开发,旨在处理关系数据模型。
29 0
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
3月前
|
SQL 关系型数据库 MySQL
INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
【8月更文挑战第7天】INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
41 5
|
3月前
|
SQL 关系型数据库 BI
关系型数据库SQL server INSERT 语句
【8月更文挑战第3天】
61 9
|
3月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
361 0
|
3月前
|
SQL 数据库 Windows
【应用服务 App Service】当使用EntityFrameWorkCore访问Sql Server数据库时,在Azure App Service会出现Cannot create a DbSet for ** because this type is not included in the model for the context的错误
【应用服务 App Service】当使用EntityFrameWorkCore访问Sql Server数据库时,在Azure App Service会出现Cannot create a DbSet for ** because this type is not included in the model for the context的错误