`

hive 创建/删除/截断 表(翻译自Hive wiki)

 
阅读更多

这里罗列常用操作,更多参考 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Create%2FDrop%2FTruncateTable

 

简单的创建表

create table table_name (
  id                int,
  dtDontQuery       string,
  name              string
)

 

 

创建有分区的表

create table table_name (
  id                int,
  dtDontQuery       string,
  name              string
)
partitioned by (date string)

一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。

分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。

在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。表中的一个 Partition 对应于表下的一个目录,Partition 就是辅助查询,缩小查询范围,加快数据的检索速度和对数据按照一定的规格和条件进行管理。

 

典型的默认创建表

复制代码
CREATE TABLE page_view(
     viewTime INT, 
     userid BIGINT,
     page_url STRING, 
     referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User')
 COMMENT 'This is the page view table'
 PARTITIONED BY(dt STRING, country STRING)
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
   COLLECTION ITEMS TERMINATED BY '\002'
   MAP KEYS TERMINATED BY '\003'
 STORED AS TEXTFILE;
复制代码

 

这里创建了表page_view,有表的注释,一个字段ip的注释,分区有两列,分别是dt和country。

[ROW FORMAT DELIMITED]关键字,是用来设置创建的表在加载数据的时候,支持的列分隔符。不同列之间用一个'\001'分割,集合(例如array,map)的元素之间以'\002'隔开,map中key和value用'\003'分割。

 

[STORED AS file_format]关键字是用来设置加载数据的数据类型,默认是TEXTFILE,如果文件数据是纯文本,就是使用 [STORED AS TEXTFILE],然后从本地直接拷贝到HDFS上,hive直接可以识别数据。

 

常用的创建表

复制代码
CREATE TABLE login(
     userid BIGINT,
     ip STRING, 
     time BIGINT)
 PARTITIONED BY(dt STRING)
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\t'
 STORED AS TEXTFILE;
复制代码

 

创建外部表

如果数据已经存在HDFS的'/user/hadoop/warehouse/page_view'上了,如果想创建表,指向这个路径,就需要创建外部表:

复制代码
CREATE EXTERNAL TABLE page_view(
     viewTime INT, 
     userid BIGINT,
     page_url STRING, 
     referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User',
     country STRING COMMENT 'country of origination')
 COMMENT 'This is the staging page view table'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
 STORED AS TEXTFILE
 LOCATION '/user/hadoop/warehouse/page_view';
复制代码

创建表,有指定EXTERNAL就是外部表,没有指定就是内部表,内部表在drop的时候会从HDFS上删除数据,而外部表不会删除。

外部表和内部表一样,都可以有分区,如果指定了分区,那外部表建了之后,还要修改表添加分区。

外部表如果有分区,还可以加载数据,覆盖分区数据,但是外部表删除分区,对应分区的数据不会从HDFS上删除,而内部表会删除分区数据。

 

指定数据库创建表

如果不指定数据库,hive会把表创建在default数据库下,假设有一个hive的数据库mydb,要创建表到mydb,如下:

CREATE TABLE mydb.pokes(foo INT,bar STRING);

或者是

use mydb; --把当前数据库指向mydb
CREATE TABLE pokes(foo INT,bar STRING);

 

复制表结构

CREATE TABLE empty_table_name LIKE table_name;

根据table_name创建一个空表empty_table_name,empty_table_name没有任何数据。

 

create-table-as-selectt (CTAS)

CTAS创建的表是原子性的,这意味着,该表直到所有的查询结果完成后,其他用户才可以看到完整的查询结果表。

CTAS唯一的限制是目标表,不能是一个有分区的表,也不能是外部表。

简单的方式

CREATE TABLE new_key_value_store
  AS 
SELECT (key % 1024) new_key, concat(key, value) key_value_pair FROM key_value_store;

复杂的方式

CREATE TABLE new_key_value_store
   ROW FORMAT SERDE "org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe"
   STORED AS RCFile AS
SELECT (key % 1024) new_key, concat(key, value) key_value_pair
FROM key_value_store
SORT BY new_key, key_value_pair;

 

删除表

DROP TABLE table_name;
DROP TABLE IF EXISTS table_name;

删除表会移除表的元数据和数据,而HDFS上的数据,如果配置了Trash,会移到.Trash/Current目录下。

删除外部表时,表中的数据不会被删除。

 

截断表

TRUNCATE TABLE table_name;
TRUNCATE TABLE table_name PARTITION (dt='20080808');

从表或者表分区删除所有行,不指定分区,将截断表中的所有分区,也可以一次指定多个分区,截断多个分区。

分享到:
评论

相关推荐

    hive-exec-*.jar包

    Missing Hive Execution Jar: /hive/hive1.2.1/lib/hive-exec-*.jar

    hive外部表创建

    ### Hive外部表创建详解 #### 一、引言 在大数据处理领域,Hive作为一款广泛使用的数据仓库工具,能够高效地对存储在Hadoop文件系统中的数据进行查询与管理。其中,外部表的创建是Hive使用过程中的一个重要概念。...

    Hive表生成工具,Hive表生成工具Hive表生成工具

    Hive表生成工具,Hive表生成工具Hive表生成工具

    修改hive表分区名称

    通常情况下,Hive表的数据会被存储在HDFS的某个指定路径下,例如`/user/hive/radius/test`。 2. **检查分区信息**:可以通过多种方式来查看Hive表的分区信息,包括使用命令`SHOW PARTITIONS test;`或者通过Hadoop的...

    快捷删除hive表的工具

    然而,当面对大量不再需要的Hive表时,手动删除不仅耗时且容易出错。针对这个问题,出现了“快捷删除Hive表的工具”,它极大地简化了这一过程。 这个工具的主要特点包括: 1. **批量删除功能**:此工具允许用户...

    hive 创建表语法.docx

    Hive 创建表语法是 Hive 中的一种基本操作,用于创建 Hive 表。Hive 表可以是内部表,也可以是外部表。下面将详细介绍 Hive 创建表语法的使用。 EXTERNAL 关键字 在 Hive 中,使用 EXTERNAL 关键字可以创建外部表...

    hive客户端安装_hive客户端安装_hive_

    1. 创建一个目录用于存放Derby数据库,例如:/var/lib/hive/metastore。 2. 修改Hive配置文件($HIVE_HOME/conf/hive-site.xml),添加以下内容: ```xml <name>javax.jdo.option.ConnectionURL</name> <value>...

    mysql数据抽取,自动生成hive建表语句

    4. **处理分区**:如果需要在Hive中创建分区表,可以分析MySQL表中的时间戳或分类字段,将其设置为Hive的分区字段。 5. **生成Hive建表语句**:基于上述信息,构造Hive的CREATE TABLE语句,包括表名、字段定义、...

    SparkSQL通过Hive创建DataFrame

    SparkSQL通过Hive创建DataFrame问题分析 问题一 Caused by: org.apache.spark.sql.catalyst.analysis.NoSuchTableException: Table or view 'stu' not found in database 'default'; 分析:确实没有临时表View,...

    hive3.1.2编译.doc

    1. `druid-handler/src/java/org/apache/hadoop/hive/druid/serde/DruidScanQueryRecordReader.java` 2. `llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/AMReporter.java` 3. `llap-server/src/...

    Hive使用手册Hive使用手册

    - **Hive类型转换** 在创建表或处理数据时,可能需要进行类型转换,这可以通过HQL的CAST函数实现。 3. **Hive创建/删除数据库** - **创建数据库** 用CREATE DATABASE语句,例如:`CREATE DATABASE mydb;` - **...

    hive 表结构导出

    支持hive 源数据、表结构导出

    hive1.x版本连接DataGrip需要的jar包

    在IT行业中,Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)对大规模数据进行分析。DataGrip是JetBrains公司开发的一款强大的数据库和SQL集成开发环境(IDE),它支持多种...

    Hive和Hase配置

    配置hive-0.9.0和hbase-0.94.1结合使用,部分内容如下: 1.拷贝hbase-0.94.1.jar和zookeeper-3.4.3.jar到hive/lib下。 注意:如hive/lib下已经存在这两个... cp zookeeper-3.4.3.jar /home/hadoop/hive-0.9.0/lib/

    kittle连接hive需要的jar包

    这些JAR包提供了与Hive Metastore服务交互所需的API,使Kettle能够识别Hive中的表结构、字段等信息,执行SQL查询或操作Hive表。 2. **Hive驱动包**: "hive-*" JAR包是Hive的客户端组件,包含了Hive的元数据服务...

    Hive配置(Oracle数据库为元数据)

    将下载好的安装包解压到服务器上的目标路径,例如 `/home/fulong/Hive/apache-hive-0.13.1-bin` 目录下。 **2. 修改环境变量** 为了让系统能够识别 Hive 的安装路径,我们需要在环境变量中增加 Hive 的相关信息。...

    spring-boot集成mybtis+druid实现hive/mysql多数据源切换

    本文将详细讨论如何使用Spring Boot、MyBatis和Druid来实现MySQL与Hive之间的多数据源切换,以满足不同业务场景的需求。 首先,Spring Boot是Spring框架的一种轻量级实现,它简化了配置并提供了快速开发新应用的...

    cdh6.3.2升级hive至3.x后登陆HiveServer2连接失败.doc

    cp /opt/cloudera/parcels/CDH/lib/hive/conf/hive-env.sh /opt/cloudera/parcels/CDH/lib/hive/conf/hive-env.sh.bak ``` 2. **编辑并注释掉 `export HIVE_OPTS`**: - 使用文本编辑器打开 `hive-env.sh` 文件...

    hive所需jar包

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL类查询语言(HQL)来处理存储在Hadoop分布式文件系统(HDFS)中的大规模数据集。Hive提供了数据仓库架构,包括元数据、SQL查询、以及结果...

    HIVE创建库创建表.docx

    而如果没有指定`location`,则数据库会默认存储在 `/user/hive/warehouse` 目录下,如创建的`noLocation_hyy_db`数据库所示,其注释为"没有指定 location"。 接着,内部表(托管表)和外部表的区别在于数据管理权。...

Global site tag (gtag.js) - Google Analytics