Hive建表语法和参数记录

这篇具有很好参考价值的文章主要介绍了Hive建表语法和参数记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hive是一个基于Hadoop的数据仓库工具,可以将结构化数据映射到HDFS存储(建表对应在HDFS建了一个文件夹),并提供类SQL查询语言-HiveQL,Hive可以将HQL语句转换为MR任务执行。
本文记录Hive建表的常用语法和参数。

建表语法

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, ...)
[ROW FORMAT DELIMITED FIELDS TERMINATED BY row_format] 
[STORED AS file_format]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)]

关键词含义

external

external关键字可以制定创建外部表。Hive建表默认创建内部表,保存表的结构(元数据)和表数据,相应删除时同时删除二者;创建外部表只管理表结构,可以使用location关键字指定已经存在的文件。

location

location /path/fie_name指定表在HDFS中的路径

数据类型
  • 数值型:
    tinyint,smallint,int,bigint,float,double,decimal(m,n),numeric
  • 字符型:
    string,varchar,char
  • 日期时间型:
    timestamp,date,interval
  • 布尔型:
    boolean
  • 复合数据类型:
    array,map,struct

数据类型实例

create table dbname.tableName(
id int,
field_a bigint,
field_b float,
field_c double,
field_d decimal(10,3),
field_e boolean,
field_f string,
field_g timestamp,
field_h date,
field_i array<string>,
field_j map<int,string>,
field_k struct<name:string, age:int>
)
row format delimited 
fields terminated by ',' -- 列之间用','分割
collection items terminated by '-'   -- 集合之间用'-'分割
map keys terminated by ':'     -- 键值之间用':'分割

-- 查询
select 
	id,
	field_a,
	field_b,
	field_c,
	field_d,
	field_e,
	field_f,
	field_g,
	field_h,
	field_i[0], -- array格式类似Python列表,使用从0开始的位置号选择数据
	field_i[1],
	field_j[<int1>], -- key格式类似Python字典,使用键名称选择值数据
	field_k.name -- struct格式使用.选择数据
from
	dbname.tableName
row format

row format关键字用于指定行的格式。

  • row format delimited只能使用单字符分隔符处理一般格式文件。
row format delimited 
	fields terminated by ',' -- 列之间用','分割,默认分隔符'\001'
	collection items terminated by '-'   -- 集合元素之间用'-'分割
	map keys terminated by ':'     -- 键值之间用':'分割
	lines terminated by '\t'  -- 行之间通过'\t'制表符分割,默认通过'\n'换行符分割
partition by

partition by(field_name string,..)关键字可以按照指定的列进行分区。同一分区的数据存储在同一文件夹,查询过滤的时候只需要根据分区值找到对应的文件夹,扫描本文件夹下本分区下的文件,避免全表数据扫描,提高了查询效率。
分区字段不能表中已经存在的字段,因为分区字段最终也会以虚拟字段的形式显示在表结构上

create table dbname.tableName(
	field_name1 string,
	field_name2 string
)
partitioned by (p_field string,pmt string comment '年月')

-- 分区表中插入数据
-- 1、手动加载数据
load data local inpath '/path/xxxx.csv' into table tableName partition (pmt='2023-10');

-- 2、insert插入数据
insert into tableName partition(p_field='aaa',pmt='2023-10')
select
	field_name1,
	field_name2
from
	tmp_tableName

更多分区表创建和插入数据内容请参考另一篇文章Hive创建分区表并插入数据

clustered by

clustered by(field_name,..) sorted by(field_name asc|desc,..) into n buckets 创建分桶表,根据指定字段和排序方式,并将表分为指定数量的桶。查询时只需遍历一个桶或部分桶的数据,提升查询效率。
分桶的本质是将表文件拆分多个文件,分桶字段必须存在表字段中

create table dbname.tableName_bucket(
	field_name1 string,
	field_name2 string
)
clustered by (field_name1) sorted by (field_name1 desc) into 4 buckets
row format delimited 
fields terminated by ','

-- 分桶表插入数据
insert into dbname.tableName_bucket
select * from tableName

-- 如果数据量过少不会产生分桶,可以设置打开强制分桶开关
set hive.enforce.bucketing=true; 
stored as

stored as后可加textfile、sequencefile、parquet、orc指定文件存储格式。文章来源地址https://www.toymoban.com/news/detail-743430.html

-- textfile是Hive默认存储格式,可以避免各种编码和数据错乱问题,但查询效率低
stroed as textfile
-- sequencefile以二进制键值对存储数据,查询效率高,但是存储空间消耗大
stored as sequencefile
-- parquet更高效的压缩,适用于字段多,无更新,只查询部分列的情况
stored as parquet
-- orc列式存储,压缩效率高,高效的列存取查询效率
stored as orc
-- 指定orc格式并使用snappy压缩
stored as orc tblproperties ("orc.compress"="SNAPPY")

-- 为了提高计算和存储效率
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
TBLPROPERTIES('parquet.compression'='SNAPPY')

到了这里,关于Hive建表语法和参数记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Hive建表时,指定分隔符

     一.建表语句 二.语句分析 ROW FORMAT DELIMITED FIELDS TERMINATED BY \\\',\\\' : 这个子句表明Hive将使用 \\\',\\\' 字符作为列分隔符,即分隔字段。 ROW FORMAT DELIMITED COLLECTION items terminated BY \\\'_\\\'  :这个子句表明Hive将使用 \\\'_\\\' 作为集合元素间的分隔符。 ROW FORMAT DELIMITED MAP KEYS TERMINATED BY \\\':\\\' :这个

    2024年02月11日
    浏览(12)
  • hive建表语句 增加字段、分区基础操作

    目录 hive建表 内部分区表 外部分区表 表结构复制: hive表删除 hive表重命名 表修改操作 增加分区 修改分区 删除分区 新增表字段  IF NOT EXISTS : 表不存在才会创建  分隔符: field.delim是表的两个列字段之间的文件中的字段分隔符.                serialization.format是文件序列化

    2024年02月06日
    浏览(11)
  • sqlserver,mysql到hive建表shell脚本

    pom文件 **

    2024年02月12日
    浏览(10)
  • hive、pg库,建表语句及查询表结构语句

    hive、pg库,建表语句及查询表结构语句

    hive 建表语句 hive 查询表结构语句   pg库建表语句

    2024年02月11日
    浏览(10)
  • Hive无法建表 遭遇 hdfs namenode state : standby 问题

    Hive无法建表 遭遇 hdfs namenode state : standby 问题

    FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: org.apache.hadoop.ipc.RemoteException Operation category READ is not supported in state standby. Visit https://s.apache.org/sbnn-error     at org.apache.hadoop.hdfs.server.namenode.ha.StandbyState.checkOperation(StandbyState.java:88)   

    2023年04月09日
    浏览(10)
  • Hive 建表客户端报错 missing EOF at “/“

    在创建表时,我使用的是idea客户端,报了如下错误 org.apache.hadoop.hive.ql.parse.ParseException:line 6:48 missing EOF at ‘/’ near ‘)’ 原本sql如下: 后来把sql中的注释去掉以后,或者把注释开头替换成 – 此异常便可以解决。

    2024年02月08日
    浏览(9)
  • hive里因为列名用了关键字导致建表失败

    hive里因为列名用了关键字导致建表失败

    ParseException line 6:4 cannot recognize input near \\\'percent\\\' \\\'String\\\' \\\'COMMENT\\\' in column name or primary key or foreign key 23/11/13 11:52:57 ERROR org.apache.hadoop.hive.ql.Driver: FAILED: ParseException line 6:4 cannot recognize input near \\\'percent\\\' \\\'String\\\' \\\'COMMENT\\\' in column name or primary key or foreign key org.apache.hadoop.hive.ql.parse.ParseExcep

    2024年01月20日
    浏览(45)
  • 助力工业物联网,工业大数据之ODS层及DWD层建表语法【七】

    助力工业物联网,工业大数据之ODS层及DWD层建表语法【七】

    一站制造项目的数仓设计为几层以及每一层的功能是什么? ODS:原始数据层:存放从Oracle中同步采集的所有原始数据 DW:数据仓库层 DWD:明细数据层:存储ODS层进行ETL以后的数据 DWB:轻度汇总层:对DWD层的数据进行轻度聚合:关联和聚合 基于每个主题构建主题事务事实表

    2023年04月26日
    浏览(19)
  • 2. postgresql并行扫描(1)——pg强制走并行扫描建表及参数配置

    2. postgresql并行扫描(1)——pg强制走并行扫描建表及参数配置

    转载自:https://developer.aliyun.com/article/700370 max_parallel_workers_per_gather 参数控制执行节点的最大并行进程数,通过以上并行计划可知,开启并行后,会启动两个 worker 进程(即 Workers Launched: 2)并行执行 https://developer.aliyun.com/article/684431 并行扫描的理念很朴素,即启动多个 worker

    2024年02月09日
    浏览(10)
  • 一百八十七、大数据离线数仓完整流程——步骤六、在ClickHouse的ADS层建表并用Kettle同步Hive中DWS层的结果数据

    一百八十七、大数据离线数仓完整流程——步骤六、在ClickHouse的ADS层建表并用Kettle同步Hive中DWS层的结果数据

    经过6个月的奋斗,项目的离线数仓部分终于可以上线了,因此整理一下离线数仓的整个流程,既是大家提供一个案例经验,也是对自己近半年的工作进行一个总结。 1、ClickHouse的ADS层建库建表语句 --如果不存在则创建hurys_dc_ads数据库 create database if not exists hurys_dc_ads; --使用

    2024年02月07日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包