-
Hive创建表语句三种方式-----(直接创建表;查询创建表;like创建表)
2018-11-28 09:03:11如下:根据上述文件内容,创建一个表t1 create table t1( id int ,name string ,hobby array ,add map,string> ) row format delimited fields terminated by ',' collection items terminated by '-' map ...版权声明:本文为博主原创文章,欢迎转载,转载请注明出处! https://blog.csdn.net/qq_36743482/article/details/78383964注:hive其他语法在hive官网有说明,建议初学者,去官网学习一手的资料,
官网:https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentationCreate Table
官网说明
Hive建表方式共有三种:
- 直接建表法
- 查询建表法
- like建表法
首先看官网介绍
’[]’ 表示可选,’|’ 表示二选一CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later) [(col_name data_type [COMMENT col_comment], ... [constraint_specification])] [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] [SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)] ON ((col_value, col_value, ...), (col_value, col_value, ...), ...) [STORED AS DIRECTORIES] [ [ROW FORMAT row_format] [STORED AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later) ] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later)
[AS select_statement]; – (Note: Available in Hive 0.5.0 and later; not supported for external tables)
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path];- data_type
- primitive_type
| array_type
| map_type
| struct_type
| union_type – (Note: Available in Hive 0.7.0 and later) - primitive_type
- TINYINT
| SMALLINT
| INT
| BIGINT
| BOOLEAN
| FLOAT
| DOUBLE
| DOUBLE PRECISION – (Note: Available in Hive 2.2.0 and later)
| STRING
| BINARY – (Note: Available in Hive 0.8.0 and later)
| TIMESTAMP – (Note: Available in Hive 0.8.0 and later)
| DECIMAL – (Note: Available in Hive 0.11.0 and later)
| DECIMAL(precision, scale) – (Note: Available in Hive 0.13.0 and later)
| DATE – (Note: Available in Hive 0.12.0 and later)
| VARCHAR – (Note: Available in Hive 0.12.0 and later)
| CHAR – (Note: Available in Hive 0.13.0 and later) - array_type
- ARRAY < data_type >
- map_type
- MAP < primitive_type, data_type >
- struct_type
- STRUCT < col_name : data_type [COMMENT col_comment], …>
- union_type
- UNIONTYPE < data_type, data_type, … > – (Note: Available in Hive 0.7.0 and later)
- row_format
- DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
[NULL DEFINED AS char] – (Note: Available in Hive 0.13 and later)
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, …)] - file_format:
- SEQUENCEFILE
| TEXTFILE – (Default, depending on hive.default.fileformat configuration)
| RCFILE – (Note: Available in Hive 0.6.0 and later)
| ORC – (Note: Available in Hive 0.11.0 and later)
| PARQUET – (Note: Available in Hive 0.13.0 and later)
| AVRO – (Note: Available in Hive 0.14.0 and later)
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname - constraint_specification:
- [, PRIMARY KEY (col_name, …) DISABLE NOVALIDATE ]
[, CONSTRAINT constraint_name FOREIGN KEY (col_name, …) REFERENCES table_name(col_name, …) DISABLE NOVALIDATE
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
观察可发现一共有三种建表方式,接下来我们将一一讲解。
1.直接建表法:
create table table_name(col_name data_type);
- 1
这里我们针对里面的一些不同于关系型数据库的地方进行说明。
row format
row_format : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] [NULL DEFINED AS char] -- (Note: Available in Hive 0.13 and later) | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
- 1
- 2
- 3
- 4
- 5
- 6
Hive将HDFS上的文件映射成表结构,通过分隔符来区分列(比如’,’ ‘;’ or ‘^’ 等),row format就是用于指定序列化和反序列化的规则。
比如对于以下记录:1,xiaoming,book-TV-code,beijing:chaoyang-shagnhai:pudong 2,lilei,book-code,nanjing:jiangning-taiwan:taibei 3,lihua,music-book,heilongjiang:haerbin
- 1
- 2
- 3
逗号用于分割列,即FIELDS TERMINATED BY char,分割为如下列 ID、name、hobby(该字段是数组形式,通过 ‘-’ 进行分割,即COLLECTION ITEMS TERMINATED BY ‘-’)、address(该字段是键值对形式map,通过 ‘:’ 分割键值,即 MAP KEYS TERMINATED BY ‘:’);
而FIELDS TERMINATED BY char用于区分不同条的数据,默认是换行符;file format(HDFS文件存放的格式)
默认TEXTFILE,即文本格式,可以直接打开。
- 是
如下:根据上述文件内容,创建一个表t1
create table t1( id int ,name string ,hobby array<string> ,add map<String,string> ) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' ;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2. 查看表的描述:desc t1;
- 下面插入数据
注:一般很少用insert (不是insert overwrite)语句,因为就算就算插入一条数据,也会调用MapReduce,这里我们选择Load Data的方式。
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
- 1
创建一个文件粘贴上述记录,并上载即可,如下图:
然后上载load data local inpath '/home/hadoop/Desktop/data' overwrite into table t1;
- 1
别忘记写文件名/data,笔者第一次忘记写,把整个Desktop上传了,一查全是null和乱码。。。。
查看表内容:select * from t1;
- 1
external
未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
区别:
内部表数据由Hive自身管理,外部表数据由HDFS管理;
内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)创建一个外部表t2
create external table t2( id int ,name string ,hobby array<string> ,add map<String,string> ) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' location '/user/t2' ;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
装载数据
load data local inpath '/home/hadoop/Desktop/data' overwrite into table t2;
- 1
查看文件位置
如下图,我们在NameNode:50070/explorer.html#/user/目录下,可以看到t2文件
t1在哪呢?在我们之前配置的默认路径里
同样我们可以通过命令行获得两者的位置信息:
desc formatted table_name;
- 1
注:图中managed table就是内部表,而external table就是外部表。分别删除内部表和外部表
下面分别删除内部表和外部表,查看区别
观察HDFS上的文件
发现t1已经不存在了
但是t2仍然存在
因而外部表仅仅删除元数据重新创建外部表t2
create external table t2( id int ,name string ,hobby array<string> ,add map<String,string> ) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' location '/user/t2' ;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
不往里面插入数据,我们select * 看看结果
可见数据仍然在!!!官网说明
A table created without the EXTERNAL clause is called a managed table because Hive manages its data. Managed and External Tables By default Hive creates managed tables, where files, metadata and statistics are managed by internal Hive processes. A managed table is stored under the hive.metastore.warehouse.dir path property, by default in a folder path similar to /apps/hive/warehouse/databasename.db/tablename/. The default location can be overridden by the location property during table creation. If a managed table or partition is dropped, the data and metadata associated with that table or partition are deleted. If the PURGE option is not specified, the data is moved to a trash folder for a defined duration. Use managed tables when Hive should manage the lifecycle of the table, or when generating temporary tables. An external table describes the metadata / schema on external files. External table files can be accessed and managed by processes outside of Hive. External tables can access data stored in sources such as Azure Storage Volumes (ASV) or remote HDFS locations. If the structure or partitioning of an external table is changed, an MSCK REPAIR TABLE table_name statement can be used to refresh metadata information. Use external tables when files are already present or in remote locations, and the files should remain even if the table is dropped. Managed or external tables can be identified using the DESCRIBE FORMATTED table_name command, which will display either MANAGED_TABLE or EXTERNAL_TABLE depending on table type. Statistics can be managed on internal and external tables and partitions for query optimization.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.查询建表法
通过AS 查询语句完成建表:将子查询的结果存在新表里,有数据
一般用于中间表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;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
根据例子我们建一张表:t3
create table t3 as select id ,name from t2 ;
- 1
- 2
- 3
- 4
- 5
- 6
会执行MapReduce过程。
查看表结构及内容,发现是有数据的,并且由于没有指定外部表和location,该表在默认位置,即是内部表。
3.like建表法
会创建结构完全相同的表,但是没有数据。
常用语中间表CREATE TABLE empty_key_value_store LIKE key_value_store;
- 1
- 2
例子
create table t4 like t2;
- 1
可以发现,不会执行MapReduce,且表结构和t2完全一样,但是没有数据。
</div> <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-2787195726.css" rel="stylesheet"> </div>
-
mysql 之as 与 like创建表之差异
2016-05-23 10:02:38对于MySQL的复制相同表结构方法,有create table as 和create table like 两种,区别是什么呢?...as创建出来的t2表(新表)缺少t1表(源表)的索引信息,只有表结构相同,没有索引。 create tabl对于MySQL的复制相同表结构方法,有create table as 和create table like 两种,区别是什么呢?
create table t2 as select * from t1 where 1=2 ; 或者 limit 0;
as创建出来的t2表(新表)缺少t1表(源表)的索引信息,只有表结构相同,没有索引。
create table t2 like t1 ;
like 创建出来的新表包含源表的完整表结构和索引信息
二者的用途:
as用来创建相同表结构并复制源表数据
like用来创建完整表结构和全部索引
oracle支持as,也是只有表结构没有索引;oracle不支持like。
同时,还发现like创建的表是没数据的。。。
同时自己的一个突然的想法,插入数据到like出来的表(说明t1是存在数据的,id,name id自增),做了如下测试
1,这种写法是可行的
create table tmp3 like t1
insert into tmp3 values (null,'aa');
2,连起来就报错了
insert into (create table tmp3 like t1) values (null,'aa');
-
mysql 创建表 like_使用MySQL LIKE创建类似于常规表的临时表
2021-03-03 19:58:51让我们首先创建一个表-mysql>createtableDemoTable1(IdintNOTNULLAUTO_INCREMENTPRIMARYKEY,Namevarchar(100));使用插入命令在表中插入一些记录-mysql>insertintoDemoTable1(Name)values('Chris');mysql>...让我们首先创建一个表-mysql> create table DemoTable1
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(100)
);
使用插入命令在表中插入一些记录-mysql> insert into DemoTable1(Name) values('Chris');
mysql> insert into DemoTable1(Name) values('Robert');
mysql> insert into DemoTable1(Name) values('Mike');
mysql> insert into DemoTable1(Name) values('Sam');
使用select语句显示表中的所有记录-mysql> select *from DemoTable1;
这将产生以下输出-+----+--------+
| Id | Name |
+----+--------+
| 1 | Chris |
| 2 | Robert |
| 3 | Mike |
| 4 | Sam |
+----+--------+
4 rows in set (0.00 sec)
以下是创建类似于常规表的临时表的查询-mysql> create temporary table DemoTable2 like DemoTable1;
让我们检查表的描述-mysql> desc DemoTable2;
这将产生以下输出-+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(100) | YES | | NULL | NULL |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.04 sec)
-
mysql 创建表like_如何使用MySQL LIKE从第一个表创建新表?
2021-02-05 08:06:41让我们首先创建一个表-createtableDemoTable1(EmployeeIdintNOTNULLAUTO_INCREMENTPRIMARYKEY,EmployeeNamevarchar(50));使用插入命令在表中插入一些记录-insertintoDemoTable1(EmployeeName)values('Tom');...让我们首先创建一个表-create table DemoTable1
(
EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
EmployeeName varchar(50)
);
使用插入命令在表中插入一些记录-insert into DemoTable1(EmployeeName) values('Tom');
insert into DemoTable1(EmployeeName) values('Mike');
insert into DemoTable1(EmployeeName) values('Emma');
insert into DemoTable1(EmployeeName) values('Sam');
使用select语句显示表中的所有记录:select *from DemoTable1;
这将产生以下输出-+------------+--------------+
| EmployeeId | EmployeeName |
+------------+--------------+
| 1 | Tom |
| 2 | Mike |
| 3 | Emma |
| 4 | Sam |
+------------+--------------+
4 rows in set (0.00 sec)
以下是在MySQL中使用LIKE从另一个表创建新表的查询-create table DemoTable2 LIKE DemoTable1;
让我们检查表的描述-desc DemoTable2;
这将产生以下输出-+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| EmployeeId | int(11) | NO | PRI | NULL | auto_increment |
| EmployeeName | varchar(50) | YES | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
-
mysql创建表语句like_MySQL 的create table as 与like 的使用
2021-02-10 07:17:371.MySQL复制相同表结构的方法:-- 1.使用AS复制相同的表结构CREATE TABLE table...使用LIKE复制相同的表结构CREATE TABLE table_name LIKE other_table;2.复制表的数据复制全部数据 注意:复制全部数据 列的类型要相... -
mysql 创建表 like_create table select 和 create table like 比较
2021-01-19 17:43:34create table select语法:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name[(create_definition,...)][table_options] [select_statement]create table like语法:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_... -
SQL中创建相同表时as 和like的区别
2020-06-21 15:00:24标题SQL中创建相同表时as 和like的区别 1.MySQL的复制相同表结构方法: 1)create table table_name as select * from table1 where 1=2 (或者limit 0); 2) create table table_name like table1_name; 二者的... -
mysql创建表28_28.笔记 MySQL学习——其他创建表方式
2021-02-05 02:19:3428.笔记 MySQL学习——其他创建表方式可以根据其他表或根据查询结果创建新表。例如 CREATE TABLE … LIKE 根据原有表创建一个表,该表原有表的空副本。把原有表的结构复制过来,保留列的属性,索引也会被复制。... -
Hive创建表
2021-01-13 02:06:26CREATE TABLE 创建一个指定名字的...LIKE 允许用户复制现有的表结构,但是不复制数据 COMMENT可以为表与字段增加描述 ROW FORMAT 设置行数据分割格式 DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMIN -
hive中创建表的三种方式:直接建表,抽取(as)建表,like建表
2018-09-08 17:21:17Hive创建表的方式(默认路径/user/hive/warehouse,也可以location指定,主要针对external表) 1、使用create命令创建一个新表,带分区 CREATE TABLE `FDM_SOR.mytest_deptaddr`( `dept_no` int, `addr` ... -
MySQL在创建相同表结构时as和like 使用的区别
2015-09-01 11:10:001.MySQL的复制相同表结构方法: 1)create table table_name as select * from table1 where 1=2 (或者limit 0);... as :用来创建相同表结构并复制源表数据。(可根据后面的条件来控制要不要复制源表数据)... -
postgreSQL从已有表创建表
2019-05-16 08:15:19创建一个表结构一样的表 create table b(like tablea including all) 创建一个表结构一样,并插入已有的数据 create table b as select * from tablea -
SQL处理表结构的基本方法整理(创建表,关联表,复制表)
2017-07-26 22:42:43复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 只复制表结构到新表 ...CREATE TABLE 新表 SELECT * FROM 旧表...CREATE TABLE 新表 LIKE 旧表 复制旧表的数据到新表(假设两个表结构一样) INS -
MySQL创建表
2018-09-19 18:59:06show variables like 'character_set_client';#查询字符集 show databases;#列出所有的服务器上的数据库alter create database if not exists test;#创建一个数据库 drop database fk;#删除数据库 show tables from ... -
SQL-通过复制另一张表结构创建新表(关键字create table,as,like)
2019-05-05 10:34:42最基本的创建表的方式 create table 表名( 列名1 数据类型, 列名2 数据类型, … ) 例如:(设置id为int型,非空,主键,自增) CREATE TABLE test3 ( id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT, name ... -
Hive 创建表方式以及表的类型
2019-07-09 22:40:00创建表的三种方式 1)常规方式 create table table_name( …字段 ) 2)通过子查询方式(类似于MySQL中视图的创建方式) create table table_name as select … 3)创建类似表(只有表结构,没有数据) create table ... -
mysql每天创建表_Navicat for MySQL 每天自动创建数据表
2021-03-04 04:31:561.业务需求:由于接收实时数据量比较大,考虑按天创建表,为了减少与硬件设备进行时间校准,故决定在前一天的23点,创建第二天的数据表,以此类推2.具体实现:工具Navicat for MySQL(1)查看event是否开启:SHOW ... -
MySql数据库表操作:创建表、删除表、查看表、修改、查询表(详细)、设置表的字符编码
2020-12-14 10:08:191 创建表 1.1 设置表的主键 1.2 设置表的外键 2 删除表 3 查看表 4 修改表 4.1 修改表名 4.2 修改字段的数据类型 4.3 修改表的字段名 4.4 增加字段 5 查询表 5.1 带in子的查询 5.2 带BETWEEN AND的范围查询 5.3 带... -
mysql创建表指定目录_mysql创建表时指定存储目录
2021-02-10 05:26:131.检查是否开启使用符号链接 SHOW VARIABLES LIKE 'have_symlink'; 2.开启符号链接支持 打开vi /etc/my.cnf中,修改为 symbolic-links=1 3.将mysql用户添加到对应用户的用户组中 usermod -a -G root mysql4.重启... -
Hive中外部表和管理表(创建表的三种方式)
2018-12-03 08:50:19创建一张表的同时,借助like 来获取表结构而不是数据: 外部表: 外部表的使用 场景:结合location来使用: 外部表和内部表的转化: 总结: 总结: 1,删除管理表的时候,会将管理表的HDFS上的数据和... -
大数据框架hive——创建表,创建分区表;设置严格模式;建立外部表与分区表;hive与Mysql的区别;启动...
2019-07-09 21:21:28hive常见创建表方式 查看表结构详情: desc formatted 表名 方式一:create table 指定字段信息 方式二:CTAS 通过子查询创建表 create table as Select 方式三:create like 创建类似表 create ... -
如何创建秒表
2015-05-15 11:17:26<p>I have an Ajax call like this: <pre><code>$(document).on('submit', '#formPropiedades', function(event) { event.preventDefault(); var content = {}, url = ... -
mysql数据定义语言(DDL)库和表(创建库、创建表)
2018-12-27 22:02:54mysql数据定义语言(DDL)库和表(创建库、创建表) 我就直接po截图和代码了,代码中有注释 # SHOW VARIABLES WHERE variable_name = 'datadir'; SHOW VARIABLES WHERE variable_name LIKE '%datadir%'; SHOW ... -
十四、创建表
2020-08-18 11:04:46一、语法格式 create table tableName( columnName dataType(length), ……………….. columnName dataType...创建表的时候,表中有字段,每一个字段有: * 字段名 * 字段数据类型 * 字段长度限制 ... -
mysql语句,如果表不存在,则仿造另外一个表结构创建表
2018-10-20 13:24:50mysql语句,如果表不存在,则仿造另外一个表结构创建表 CREATE TABLE IF NOT EXISTS student1 like student; -
MySQL根据现有表创建新表
2019-04-15 10:40:24从其他数据表中创建数据表,可以使用如下命令: create table ... like ... 1 该语句将创建一个新的数据表作为原始数据表的一份空白副本。它将把原始数据表的所有列属性都会一摸一样的复制过来,但是数据表的内容是... -
手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like...
2018-07-18 12:25:00三、创建表 四、插入数据 五、查询数据 六、删除数据 七、运算符 八、like语句 我的环境配置:windows 64,VS,SQLite(点击下载),System.Data.SQLite.DLL(点击下载)。 一、新建项目,... -
MySQL创建表结构的语句
2020-06-24 16:05:11MySQL创建表 show variables like ‘character_set_client’;#查询字符集 show databases;#列出所有的服务器上的数据库alter create database if not exists test;#创建一个数据库 drop database fk;#删除数据库 ... -
sqlserver 根据旧表创建新表
2019-10-22 10:42:47sqlserver数据库中,根据旧表创建新表的方法,网上流行的是以下两种: A:create table tab_new like tab_old (使用旧表创建新表) ...然而,用上面的语句创建表时,都提示语法错误,经过百度和尝试之后,发现以下两...