sql怎么删除一个表中的所有数据(删除数据库中的表)

sql怎么删除一个表中的所有数据(删除数据库中的表),第1张

hive的语法和sql语法大部分是是相同的,下面我们来挨个写出来:

1,简单介绍存储原理:

hive和hdfs交互,以及和本地linux交互,分为本地文件和hdfs文件,要说他们的区别,底层都是存在磁盘上,要说区别的话,hdfs分布式文件管理系统,有它独有的文件存储结构也即是能够和分布式文件进行交互的独有存储方式,Linux本地文件存储知识单纯的在Linux *** 作系统存储的文件,所以hive的作用就是和linux本地以及linux上hdfs文件两者进行交互,我可以把本地的文件上传到hive文件中,当然hive只是处理hdfs上文件的一个工具,但是hive也有自己独有的文件存储,表的结构信息,创建的表信息,都在hive文件夹中当然是存储在hdfs上的。

2,语法:

1,把本地的文件加载到hive创建的表中(比如:create table tb_user(id int ,name string ); )在hive中创建的是有结构的表,然后通过命令:load data local inpath ' 路径 ' into table 创建的表名;

2,加载hdfs上的文件到hive中:load data inpath 'hdfs上的路径' into table 创建的表

3,导出hive表到hdfs上:export table 表名 to 'hdfs路径' ;

4,把hdfs上的表导入到hive表中:import table (hive表 )from (hdfs上的表);(import table tb_kk from '/data/a')当导入的表不存在会自动创建这张表,用于备份,或者数据转移,表的字段名和导入的字段名一样。

5,通过查询hive表中的数据并把查询的数据导出到本地:insert overwrite local directory '本地路径' select from student;

6通过查询hive表中的数据并把查询的数据导出到hdfs上:insert overwrite directory 'hdfs上的路径'

select from student;

7, 把查询的结果插入到 当前的hive表中 : insert overwrite table student partition(month='201708') select id, name from student where month='201709';

8,创建表并加载查询到的数据:create table if not exists tb_text as select from tb_text;(as 关键字 同样)

9,创建表时通过Location指定加载数据路径:create table tb_text (id int , name string ) row format delimited fields terminated by ‘,’ location '/hdfs上的目录',(记住是目录)。

10,创建分区表,分区表就是能够把不同的数据分开来存放,在查询的时候只需要查询指定的分区就行,这样子能够加快查询效率:create table tb_text (id int ,name string ) partitioned by (month string) (//这里我用month来作为分区条件,分区字段不能是表中已经存在的字段,可以将分区字段看成表的伪列,不参与真实字段的 ) row format delimited fields terminated by ',' ;看一下加载数据到分区表的列子,更好地理解一下,load data local inpath '/opt/module/datas/depttxt' into table defaultdept_partition partition(month='201709');//最后就是给伪列字段赋予分区值,也就是分区的文件名。

11,查看表结构,这个需要了解清楚:desc tb_text 查看基本表信息,desc formatted tb_text ,查看详细信息。

12,当数据库存在数据强制删除时可以用:drop database db_hive cascade;

13,当数据库不存在数据:drop database db_hive;

14,默认创建的表为管理表,也称之为内部表,数据和表结构是在一起的,也就是说,当我删除表的时候,底层数据也会跟着一起删除,设计成这样要求一张表代表一份数据,保证数据的安全性。

15,外部表为只存储表的元数据和结构信息,存储的是表的路径,删除外部表不会删除内部数据,只会把表的元数据信息删除了,不影响数据本身,通常用作共享数据,设计外部表的语法为:create external table tb_text(id int ,name string);

16,创建表的时候复制表结构:create table tb_text like tb_text01;

3,外部表和内部表的转化:

1,修改内部表为外部表:alter table tb_text set tblproperties('EXTERNAL'='TRUE');

2,修改外部表为内部表:alter table tb_text set tblproperties('EXTERNAL'='FALSE'); -- 要求KV的大小写,('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!

为什么使用Hive?

为什么使用Hive?那么,在哪里使用Hive呢?在载入了60亿行(经度、维度、时间、数据值、高度)数据集到MySQL后,系统崩溃了,并经历过数据丢失。这可能部分是因为我们最初的策略是将所有的数据都存储到单一的一张表中了。后来,我们调整了策略通过数据集和参数进行分表,这有所帮助但也因此引入了额外的消耗,而这并非是我们愿意接受的。

相反,我们决定尝试使用Apache Hive技术。我们安装了Hive 05 + 20,使用CDHv3和Apache Hadoop(0 20 2 + 320)。CDHv3还包含有许多其他相关工具,包括Sqoop和Hue这些在我们的架构中都标识出来了,如图23-3底部所示。

我们使用Apache Sqoop转储数据到Hive中,然后通过写一个Apache OODT包装器,来使Hive按照空间/时间约束查询数据,然后将结果提供给RCMET和其他用户(图23-2中间部分显示)。RCMES集群的完整的架构如图23- 3所示。我们有5台机器,包括图中所示的一个主/从配置,通过一个运行GigE的私人网进行连接。

Hive提供了什么

Photobucket公司使用Hive的主要目标是为业务功能、系统性能和用户行为提供答案。为了满足这些需求,我们每晚都要通过Flume从数百台服务器上的MySQL数据库中转储来自Web服务器和自定义格式日志TB级别的数据。这些数据有助于支持整个公司许多组织,比如行政管理、广告、客户支持、产品开发和 *** 作,等等。对于历史数据,我们保持所有MySQL在每月的第一天创建的所有的数据作为分区数据并保留30天以上的日志文件。Photobucket使用一个定制的ETL框架来将MySQL数据库中数据迁移到Hive中。使用Flume将日志文件数据写入到HDFS中并按照预定的Hive流程进行处理。

Hive支持的用户有哪些

行政管理依赖于使用Hadoop提供一般业务健康状况的报告。Hive允许我们解析结构化数据库数据和非结构化的点击流数据,以及业务所涉及的数据格式进行读取。

广告业务使用Hive筛选历史数据来对广告目标进行预测和定义配额。产品开发无疑是该组织中产生最大数量的特定的查询的用户了。对于任何用户群,时间间隔变化或随时间而变化。Hive是很重要的,因为它允许我们通过对在当前和历史数据中运行A / B测试来判断在一个快速变化的用户环境中新产品的相关特性。

在Photobucket公司中,为我们的用户提供一流的系统是最重要的目标。从 *** 作的角度来看,Hive被用来汇总生成跨多个维度的数据。在公司里知道最流行的媒体、用户、参考域是非常重要的。控制费用对于任何组织都是重要的。一个用户可以快速消耗大量的系统资源,并显著增加每月的支出。Hive可以用于识别和分析出这样的恶意用户,以确定哪些是符合我们的服务条款,而哪些是不符合的。也可以使用Hive对一些 *** 作运行A / B测试来定义新的硬件需求和生成ROI计算。Hive将用户从底层MapReduce代码解放出来的能力意味着可以在几个小时或几天内就可以获得答案,而不是之前的数周。

Hive中的数据库

Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间。然而,对于具有很多组和用户的大集群来说,这是非常有用的,因为这样可以避免表命名冲突。通常会使用数据库来将生产表组织成逻辑组。

如果用户没有显式指定数据库,那么将会使用默认的数据库default。

下面这个例子就展示了如何创建一个数据库:

hive> CREATE DATABASE financials;

如果数据库financials已经存在的话,那么将会抛出一个错误信息。使用如下语句可以避免在这种情况下抛出错误信息:

hive> CREATE DATABASE IF NOT EXISTS financials;

虽然通常情况下用户还是期望在同名数据库已经存在的情况下能够抛出警告信息的,但是IF NOT EXISTS这个子句对于那些在继续执行之前需要根据需要实时创建数据库的情况来说是非常有用的。

在所有的数据库相关的命令中,都可以使用SCHEMA这个关键字来替代关键字TABLE。

随时可以通过如下命令方式查看Hive中所包含的数据库:

hive> SHOW DATABASES;

default

financials

hive> CREATE DATABASE human_resources;

hive> SHOW DATABASES;

default

financials

human_resources

如果数据库非常多的话,那么可以使用正则表达式匹配来筛选出需要的数据库名,正则表达式这个概念,将会在第623节“Like和RLike”介绍。下面这个例子展示的是列举出所有以字母h开头,以其他字符结尾(即部分含义)的数据库名:

hive> SHOW DATABASES LIKE 'h';

human_resources

hive>

Hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储。有一个例外就是default数据库中的表,因为这个数据库本身没有自己的目录。

数据库所在的目录位于属性hivemetastorewarehousedir所指定的顶层目录之后,这个配置项我们已经在前面的第251节“本地模式配置”和第252节“分布式模式和伪分布式模式配置”中进行了介绍。假设用户使用的是这个配置项默认的配置,也就是/user/hive/warehouse,那么当我们创建数据库financials时,Hive将会对应地创建一个目录/user/hive/warehouse/financialsdb。这里请注意,数据库的文件目录名是以db结尾的。

用户可以通过如下的命令来修改这个默认的位置:

hive> CREATE DATABASE financials

> LOCATION '/my/preferred/directory';

用户也可以为这个数据库增加一个描述信息,这样通过DESCRIBE DATABASE <database> 命令就可以查看到该信息。

hive> CREATE DATABASE financials

> COMMENT 'Holds all financial tables';

hive> DESCRIBE DATABASE financials;

financials Holds all financial tables

hdfs://master-server/user/hive/warehouse/financialsdb

从上面的例子中,我们可以注意到,DESCRIEB DATABASE语句也会显示出这个数据库所在的文件目录位置路径。在这个例子中,URI格式是hdfs。如果安装的是MapR,那么这里就应该是maprfs。对于亚马逊d性MapReduce(EMR)集群,这里应该是hdfs,但是用户可以设置hivemetastorewarehousedir为亚马逊S3特定的格式(例如,属性值设置为s3n://bucketname)。用户可以使用s3作为模式,但是如果使用新版的规则s3n会更好。

前面DESCRIBE DATABASE语句的输出中,我们使用了master-server来代表URI权限,也就是说应该是由文件系统的“主节点”(例如,HDFS中运行NameNode服务的那台服务器)的服务器名加上一个可选的端口号构成的(例如,服务器名:端口号这样的格式)。如果用户执行的是伪分布式模式,那么主节点服务器名称就应该是localhost。对于本地模式,这个路径应该是一个本地路径,例如file:///user/hive/warehouse/financialsdb。

如果这部分信息省略了,那么Hive将会使用Hadoop配置文件中的配置项fsdefaultname作为master-server所对应的服务器名和端口号,这个配置文件可以在$HADOOP_HOME/conf这个目录下找到。

需要明确的是,hdfs:///user/hive/warehouse/financialsdb和hdfs://master-server/user/hive/

warehouse/financialsdb是等价的,其中master-server是主节点的DNS名和可选的端口号。

为了保持完整性,当用户指定一个相对路径(例如,some/relative/path)时,对于HDFS和Hive,都会将这个相对路径放到分布式文件系统的指定根目录下(例如,hdfs:///user/<user-name>)。然而,如果用户是在本地模式下执行的话,那么当前的本地工作目录将是some/relative/path的父目录。

为了脚本的可移植性,通常会省略掉那个服务器和端口号信息,而只有在涉及到另一个分布式文件系统实例(包括S3存储)的时候才会指明该信息。

此外,用户还可以为数据库增加一些和其相关的键-值对属性信息,尽管目前仅有的功能就是提供了一种可以通过DESCRIBE DATABASE EXTENDED <database>语句显示出这些信息的方式:

hive> CREATE DATABASE financials

> WITH DBPROPERTIES ('creator' = 'Mark Moneybags', 'date' = '2012-01-02');

hive> DESCRIBE DATABASE financials;

financials hdfs://master-server/user/hive/warehouse/financialsdb

hive> DESCRIBE DATABASE EXTENDED financials;

financials hdfs://master-server/user/hive/warehouse/financialsdb

{date=2012-01-02, creator=Mark Moneybags);

USE命令用于将某个数据库设置为用户当前的工作数据库,和在文件系统中切换工作目录是一个概念:

hive> USE financials;

现在,使用像SHOW TABLES这样的命令就会显示当前这个数据库下所有的表。

不幸的是,并没有一个命令可以让用户查看当前所在的是哪个数据库!幸运的是,在Hive中是可以重复使用USE…命令的,这是因为在Hive中并没有嵌套数据库的概念。

可以回想下,在第272节“变量和属性”中提到过,可以通过设置一个属性值来在提示符里面显示当前所在的数据库(Hive v080版本以及之后的版本才支持此功能):

hive> set hivecliprintcurrentdb=true;

hive (financials)> USE default;

hive (default)> set hivecliprintcurrentdb=false;

hive>

最后,用户可以删除数据库:

hive> DROP DATABASE IF EXISTS financials;

IF EXISTS子句是可选的,如果加了这个子句,就可以避免因数据库finanacials不存在而抛出警告信息。

默认情况下,Hive是不允许用户删除一个包含有表的数据库的。用户要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后面加上关键字CASCADE,这样可以使Hive自行先删除数据库中的表:

hive> DROP DATABASE IF EXISTS financials CASCADE;

如果使用的是RESTRICT这个关键字而不是CASCADE这个关键字的话,那么就和默认情况一样,也就是,如果想删除数据库,那么必须先要删除掉该数据库中的所有表。

如果某个数据库被删除了,那么其对应的目录也同时会被删除。

对spark、hive、impala、hdfs的常用命令作了如下总结,欢迎大家补充!

1 Spark的使用:

以通过SecureCRT访问IP地址:1010234198 为例进行说明:

先输入:ll //查询集群是否装有spark

>su - mr

>/home/mr/spark/bin/beeline -u "jdbc:hive2:/bigdata198:18000/" -n mr -p ""

>show databases; //显示其中数据库,例如

>use bigmax; //使用数据库bigmax

>show tables; //查询目录中所有的表

>desc formatted TableName; //显示表的详细信息,包括分区、字段、地址等信息

>desc TableName; //显示表中的字段和分区信息

>select count() from TableName; //显示表中数据数量,可以用来判断表是否为空

>drop table TableName; //删除表的信息

>drop bigmax //删除数据库bigmax

>describe database zxvmax //查询数据库zxvmax信息

创建一个表

第一步:

>create external table if not exists lte_Amaze //创建一个叫lte_Amaze的表

( //括号中每一行为表中的各个字段的名称和其所属的数据类型,并用空格隔开

DateTime String,

MilliSec int,

Network int,

eNodeBID int,

CID int,

IMSI String,

DataType int,

AoA int,

ServerRsrp int,

ServerRsrq int,

TA int,

Cqi0 Tinyint,

Cqi1 Tinyint //注意,最后一个字段结束后,没有逗号

)

partitioned by (p_date string, p_hour INT) //以p_date和p_hour作为分区

row format delimited fields terminated by ',' //表中行结构是以逗号作为分隔符,与上边的表中字段以逗号结尾相一致/

stored as textfile; //以文本格式进行保存

第二步:添加分区,指定分区的位置

>alter table lte_Amaze add partition (p_date='2015-01-27',p_hour=0) location'/lte/nds/mr/lte_nds_cdt_uedetail/p_date=2015-01-27/p_hour=0';

//添加lte_Amaze表中分区信息,进行赋值。

//并制定分区对应目录/lte/nds/mr下表lte_nds_cdt_uedetail中对应分区信息

第三步:察看添加的结果

>show partitions lte_Amaze; //显示表的分区信息

2 hdfs使用:

#su - hdfs //切换到hdfs用户下 、

#hadoop fs –ls ///查看进程

# cd /hdfs/bin //进入hdfs安装bin目录

>hadoop fs -ls /umtsd/cdt/ //查询/umtsd/cdt/文件目录

>hadoop fs -mkdir /umtsd/test //在/umtsd目录下创建test目录

>hadoop fs -put /home/data/u1002csv /impala/data/u5002 //将home/data/u1002csv这个文件put到hdfs文件目录上。put到hdfs上的数据文件以逗号“,”分隔符文件(csv),数据不论类型,直接是数据,没有双引号和单引号

>hadoop fs -rm /umtsd/test/testtxt //删除umtsd/test目录下的testtxt文件

>hadoop fs -cat /umtsd/test/testtxt //查看umtsd/test目录下的testtxt文件内容

3hive *** 作使用:

#su - mr //切换到mr用户下

#hive //进入hive查询 *** 作界面

hive>show tables; //查询当前创建的所有表

hive>show databases; //查询当前创建的数据库

hive>describe table_name; {或者desc table_name}//查看表的字段的定义和分区信息,有明确区分(impala下该命令把分区信息以字段的形式显示出来,不怎么好区分)

hive> show partitions table_name; //查看表对应数据现有的分区信息,impala下没有该命令

hive> quit;//退出hive *** 作界面

hive>desc formatted table_name; 查看表结构,分隔符等信息

hive> alter table ceshi change id id int; 修改表的列数据类型 //将id数据类型修改为int 注意是两个id

hive> SHOW TABLES 's'; 按正条件(正则表达式)显示表,

[mr@aico ~]$ exit; 退出mr用户 *** 作界面,到[root@aico]界面

impala *** 作使用:

#su - mr //切换到mr用户下

#cd impala/bin //进入impala安装bin目录

#/impala/bin> impala-shellsh -i 1010234166/localhost //进入impala查询 *** 作界面

[1010234166:21000] >show databases; //查询当前创建的数据库

[1010234166:21000] >use database_name; //选择使用数据库,默认情况下是使用default数据库

[1010234166:21000] > show tables; //查询当前数据库下创建的所有表

[1010234166:21000] >describe table_name; //查看表的字段的定义,包括分区信息,没有明确区分

[1010234166:21000] > describe formatted table_name; //查看表对应格式化信息,包括分区,所属数据库,创建用户,创建时间等详细信息。

[1010234166:21000] >refresh table_name; //刷新一下,保证元数据是最新的

[1010234166:21000] > alter TABLE U107 ADD PARTITION(reportDate="2013-09-27",rncid=487)LOCATION '/umts/cdt/

MREMITABLE/20130927/rncid=487' //添加分区信息,具体的表和数据的对应关系

[1010234166:21000] > alter TABLE U100 drop PARTITION(reportDate="2013-09-25",rncid=487); //删除现有的分区,数据与表的关联

[1010234166:21000] >quit; //退出impala *** 作界面

[mr@aicod bin]$ impala-shell; 得到welcome impala的信息,进入impala 查询 *** 作界面

[aicod:21000] > 按两次tab键,查看可以用的命令

alter describe help profile shell values

connect drop history quit show version

create exit insert select unset with

desc explain load set use

以上就是关于sql怎么删除一个表中的所有数据(删除数据库中的表)全部的内容,包括:sql怎么删除一个表中的所有数据(删除数据库中的表)、要从数据库中删除一个表,应该使用的sql、哪一项不能成功删除customert表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10204180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存