您的位置:

Hive建表详解

一、hive建表语句

在Hive中,可以通过CREATE TABLE语句来创建一张表。基本语法如下:

CREATE [TEMPORARY] [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]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)]

其中,TEMPORARY指定表为临时表,EXTERNAL指定表的数据是外部数据,IF NOT EXISTS在表已经存在时不会重新创建,COMMENT用于添加表的注释,PARTITIONED BY用于分区,CLUSTERED BY和SORTED BY用于排序,ROW FORMAT表示数据的行格式,STORED AS表示数据的存储格式,LOCATION指定存储的位置,TBLPROPERTIES用于添加表的其他属性。

二、在hive中怎么建表

在Hive中,可以通过以下步骤来建表:

1、打开命令行终端或者通过图形化界面打开Hive。

2、使用USE命令选择要使用的数据库。

USE database_name;

3、使用CREATE TABLE语句来创建表。

CREATE TABLE table_name(
  column1_name column1_type, 
  column2_name column2_type,
  ...)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t' //使用tab作为分隔符
LINES TERMINATED BY '\n' //使用换行符作为行分隔符
STORED AS TEXTFILE; //存储格式为TEXT文件

4、在表中插入数据。

INSERT INTO table_name VALUES(value1, value2, ...);

三、hive建表分隔符

在Hive中,通过ROW FORMAT DELIMITED指定分隔符。可以使用除了特殊字符和ASCII码以外的任意字符作为分隔符。常用的分隔符有逗号、制表符、竖线、空格等,如果要指定其他分隔符则需要加上ESCAPED BY关键字。

ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
ESCAPED BY '\\'
LINES TERMINATED BY '\n'

四、hive建表指定存储格式

在Hive中,可以通过STORED AS指定存储格式。

例如,存储为TEXT文件的示例:

CREATE TABLE table_name(
  column1_name column1_type, 
  column2_name column2_type,
  ...)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

存储为AVRO文件的示例:

CREATE TABLE table_name(
  column1_name column1_type, 
  column2_name column2_type,
  ...)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS AVRO;

五、hive建表报错

在Hive中,创建表时可能会遇到各种错误。常见的错误有:

表名已经存在,部分字段类型不匹配,分隔符和存储格式不匹配等。当遇到错误时可以看看错误提示,尝试修改代码或者重启Hive。

六、hive建表分区

Hive中的分区是将一张表的数据分散存储在不同的目录中,方便查找和处理。

如下是对表按时间分区的示例:

CREATE TABLE table_name(
  column1_name column1_type, 
  column2_name column2_type,
  ...)
PARTITIONED BY (date_partition string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

插入数据时,需要指定分区:

INSERT INTO TABLE table_name PARTITION (date_partition='2019-01-01') VALUES (value1, value2, ...)

七、查找hive建表日期

在Hive中,可以使用内置函数date_format来格式化日期,例如将"20220101"格式化为"2022-01-01":

SELECT date_format('20220101', 'yyyy-MM-dd') as date;

八、hive建表指定序列化

在Hive中,可以通过SERDE指定序列化方式。

例如,使用JSON格式序列化的示例:

CREATE TABLE table_name(
  column1_name column1_type, 
  column2_name column2_type,
  ...)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE;

九、hive建表语句详解

CREATE TABLE语句是Hive中创建表的最基本的语法。语法结构非常灵活,可以通过不同的参数来满足不同的需求。

例如:

1、创建外部表:

CREATE EXTERNAL TABLE table_name(
  column1_name column1_type, 
  column2_name column2_type,
  ...)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
LOCATION 'hdfs://localhost:8020/user/hadoop/external_data/';

2、分区表:

CREATE TABLE table_name(
  column1_name column1_type, 
  column2_name column2_type,
  ...)
PARTITIONED BY (date_partition string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

3、使用Bucket:

CREATE TABLE table_name(
  column1_name column1_type, 
  column2_name column2_type,
  ...)
CLUSTERED BY (column1_name) INTO 4 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
总之,Hive建表语句非常灵活,可以根据不同的需求进行不同的设置。例如,可以指定分隔符、存储格式、分区等,来满足不同的业务需求。