1. HIVE 基本操作
  2. create table
  3. 总述
  1. CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常。
  2. EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
  3. LIKE 允许用户复制现有的表结构,但是不复制数据。
  4. 用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe[王黎1] 。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体的列的数据。
  5. 如果文件数据是纯文本,可以使用 STORED AS TEXTFILE[王黎2] 。如果数据需要压缩,使用 STORED AS SEQUENCE [王黎3] 。
  6. 有分区的表可以在创建的时候使用 PARTITIONED BY 语句。一个表可以拥有一个或者多个分区,每一个分区单独存在一个目录下。而且,表和分区都可以对某个列进行 CLUSTERED BY 操作,将若干个列放入一个桶(bucket)[王黎4] 中。也可以利用SORT BY 对数据进行排序。这样可以为特定应用提高性能。
  7. 表名和列名不区分大小写,SerDe 和属性名区分大小写。表和列的注释是字符串。
  1. 语法

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name

[(col_name data_type [COMMENT col_comment], ...)]

[COMMENT table_comment]

[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]

[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]

[

[ROW FORMAT row_format] [STORED AS file_format]

| STORED BY 'storage.handler.class.name' [ WITH SERDEPROPERTIES (...) ]  (Note:  only available starting with 0.6.0)

]

[LOCATION hdfs_path]

[TBLPROPERTIES (property_name=property_value, ...)]  (Note:  only available starting with 0.6.0)

[AS select_statement]  (Note: this feature is only available starting with 0.5.0.)

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name

LIKE existing_table_name

[LOCATION hdfs_path]

data_type

: primitive_type

| array_type

| map_type

| struct_type

primitive_type

: TINYINT

| SMALLINT

| INT

| BIGINT

| BOOLEAN

| FLOAT

| DOUBLE

| STRING

array_type

: ARRAY < data_type >

map_type

: MAP < primitive_type, data_type >

struct_type

: STRUCT < col_name : data_type [COMMENT col_comment], ...>

row_format

: DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]

[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]

| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

file_format:

: SEQUENCEFILE

| TEXTFILE

| RCFILE     (Note:  only available starting with 0.6.0)

| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

目前在hive中常用的数据类型有:

BIGINT – 主要用于状态,类别,数量的字段, 如status/option/type/quantity

DOUBLE – 主要用于金额的字段, 如fee/price/bid

STRING – 除上述之外的字段基本都使用String, 尤其是id和日期时间这样的字段

  1. 基本例子

1、如果一个表已经存在,可以使用if not exists

2、 create table htduan(id int,cont string) row format delimited fields terminated by '\005' stored as textfile;

terminated by:关于来源的文本数据的字段间隔符

如果要将自定义间隔符的文件读入一个表,需要通过创建表的语句来指明输入文件间隔符,然后load data到这个表。

4、Alibaba数据库常用间隔符的读取

我们的常用间隔符一般是Ascii码5,Ascii码7等。在hive中Ascii码5用’\005’表示, Ascii码7用’\007’表示,依此类推。

5、装载数据

查看一下:Hadoop fs -ls

LOAD DATA INPATH '/user/admin/htduan/a.txt' OVERWRITE INTO TABLE htduan;

6、如果使用external建表和普通建表区别

A、指定一个位置,而不使用默认的位置。如:

create  EXTERNAL  table htduan(id int,cont string) row format delimited fields terminated by '\005' stored as textfile location '/user/admin/htduan/';

--------------check结果

ij> select LOCATION from tbls a,sds b where a.sd_id=b.sd_id and tbl_name='htduan';

-----

LOCATION

--------------------------------------------------------------------------------------------------------------------------------

hdfs://hadoop1:7000/user/admin/htduan

ij> select LOCATION from tbls a,sds b where a.sd_id=b.sd_id and tbl_name='c';

----

LOCATION

--------------------------------------------------------------------------------------------------------------------------------

hdfs://hadoop1:7000/user/hive/warehouse/c

B、对于使用create table external建表完成后,再drop掉表,表中的数据还在文件系统中。

如:

hive> create  EXTERNAL  table htduan(id int,cont string) row format delimited fields terminated by '\005' stored as textfile;

----

OK

hive> LOAD DATA INPATH '/user/admin/htduan' OVERWRITE INTO TABLE htduan;

--------------------------------------------------

Loading data to table htduan

OK

hive> drop table htduan;

----

OK

[admin@hadoop1 bin]$ ./hadoop fs -ls hdfs://hadoop1:7000/user/hive/warehouse/htduan

Found 1 items

使用普通的建表DROP后则找不到

  1. 创建分区

HIVE的分区通过在创建表时启用partition by实现,用来partition的维度并不是实际数据的某一列,具体分区的标志是由插入内容时给定的。当要查询某一分区的内容时可以采用where语句,形似where tablename.partition_key > a来实现。

创建含分区的表。

命令原型:

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)

CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\001'

COLLECTION ITEMS TERMINATED BY '\002'

MAP KEYS TERMINATED BY '\003'

STORED AS SEQUENCEFILE;

Eg:

建表:

CREATE TABLE c02_clickstat_fatdt1

(yyyymmdd  string,

id              INT,

ip               string,

country          string,

cookie_id        string,

page_id          string  ,

clickstat_url_id int,

query_string     string,

refer            string

)PARTITIONED BY(dt STRING)

row format delimited fields terminated by '\005' stored as textfile;

装载数据:

LOAD DATA INPATH '/user/admin/SqlldrDat/CnClickstat/20101101/19/clickstat_gp_fatdt0/0' OVERWRITE INTO TABLE c02_clickstat_fatdt1

PARTITION(dt='20101101');

访问某一个分区

SELECT count(*)

FROM c02_clickstat_fatdt1 a

WHERE a.dt >= '20101101' AND a.dt < '20101102';

  1. 其它例子

1、指定LOCATION位置

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 '<hdfs_location>';

  1. 复制一个空表

CREATE TABLE empty_key_value_store

LIKE key_value_store;


Hive数据库创建表相关推荐

  1. 2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive数据库和表操作 一.数据库操作 1.创建数据库 2.创建 ...

  2. R操作MySQL数据库创建表、删除表、增删改查(CRUD)

    R操作MySQL数据库创建表.删除表.增删改查(CRUD) 关系数据中的数据是按照一定范式去存储的.当我们需要非常高级和复杂的Sql查询就可以使用关系数据库的数据资产.不光java和python可以容 ...

  3. python 笔记 之 sqlalchemy操作数据库-创建表

    2019独角兽企业重金招聘Python工程师标准>>> ''' pip install SQLAlchemy 操作数据库-创建表 ''' import sqlalchemy''' s ...

  4. Oracle 数据库创建表空间、创建用户指定表空间

    Oracle 数据库创建表空间.创建用户指定表空间 //创建临时表空间 create temporary tablespace user_temp tempfile 'D:\oracle\oradat ...

  5. 数据库创建(利用写好的数据库表生成创建表的sql语句+利用生成的数据库创建表加同步数据sql)

    一.利用写好的数据库表生成创建表的sql语句 1.简单创建一个数据库,并建一个表,并编辑数据. a.建库 b.建表 c.编辑表,保存时输入表名 d.刷新一下,出来了 e.转存导出sql文件. 二.利用 ...

  6. python Django 连接mysql数据库创建表详细全过程

    python Django 连接mysql数据库创建表详细全过程 1,在数据库中新建一个要连接的数据库(在cmd命令行里登录数据库进行创建创建) mysql -u root -p**+密码** cre ...

  7. oracle数据库创建表

    oracle数据库创建表 实际工作中,在数据库中创建表是经常会用到的.我们今天呢?主要给大家来分享一下在数据库如何通过sql语句去创建表.其实,创建表很简单,只需要把数据库的数据类型和约束搞清楚就可以 ...

  8. 数据库创建表失败原因

    小白又建数据库创建表之N种错误= = 这次错误是由于表的名字 user 为数据库的关键字造成的,而且错误很难找出,因为控制台并没有报错,而且正常输出创建表的hibernate语句,后想到改个表名试试, ...

  9. 数据库创建表的时候加注释

    数据库创建表的时候加注释 COMMENT 'xxx' CREATE TABLE `bs_pawn_tickets` (   `TICKET_ID` varchar(32) DEFAULT NULL C ...

最新文章

  1. 机器学习:使用numpy实现数据增强(Data Augmentation)
  2. 拿到两封信,开心ING
  3. .NET:使用 LinqSharp 简化复杂查询
  4. 【转】一、用于VS2019的QT配置
  5. 【BZOJ1003】【codevs1655】物流运输,最短路+DP
  6. 最大流问题 Edmonds-Karp算法
  7. java自己写不出来_java学习中,能看懂代码,但是自己写不出来怎么处理?
  8. ajax 上传文件实例,Ajax 之文件上传
  9. 【CentOS8.0开启防火墙放行8081端口】
  10. malloc,calloc区别
  11. Codeforces 802 补题
  12. 户外运动耳机选择哪个、最适合户外运动的蓝牙耳机推荐
  13. c语言宏定义在预处理阶段,预处理和宏定义
  14. xiuno开发文档_大白 · TinyMCE编辑器v1.9_Xiuno Plugin_奇狐插件商店_奇狐网
  15. 计算机网络课程路由表,计算机网络之探赜索隐
  16. ASP.NET 2.0收集
  17. windows和linux下源码编译7-Zip(7za)
  18. 如何对“诱惑”说不?
  19. c语言vc2010使用方法
  20. ASO优化:如何提高App Store应用商店中排名?

热门文章

  1. K8S二进制部署---单节点master
  2. 数据治理:数据质量管理策略!
  3. CPU平均负载过高检查(iowait负载高)
  4. QGraphicsItem图元的简单使用(一)
  5. 百度云盘秒传链接的建立
  6. 旧版macOS官方下载地址
  7. 列表(list)使用方法详解
  8. linux 没有可用的缓冲区空间不足,由于系统缓冲区空间不足或队列已满,不能执...
  9. 17_1.Excel股票分析工具-开盘前涨停数据
  10. 利用 Pyecharts 制作饼图