Hive 基本语法,
建表
通用建表
CREATE TABLE IF NOT EXISTS `Db.Table`(
`uuid` string,
`user_id` int,
`user_ip` string,
`created` int,
`user_agent` string,
`device_id` bigint,
`referer` string)
COMMENT 'This is a test table'
PARTITIONED BY (ptdate string)
CLUSTERED BY(userid) SORTED BY(created) INTO 64 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
STORED AS TEXTFILE
LOCATION 'hdfs://localhost:8020/user/test/logs/a'
利用查询结果建表
CREATE TABLE IF NOT EXISTS `Db.Select` AS
SELECT *
FROM TABLE_TEST
WHERE XX=XX
建表并复制表结构
CREATE TABLE IF NOT EXISTS `Db.Table` LIKE `Db.Tablelike`
Tips
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
正则:
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = " (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\".*\") ?"
)
- STORED AS TEXTFILE,指定了数据的存储格式,表示以纯文本形式存储。其他还包括:
# 文件存储格式
: 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
修改表
hive 新增列
ALTER TABLE `Db.Table` ADD COLUMNS user_level INT
hive 改列
修改列的类型
ALTER TABLE `Db.Table` CHANGE user_id user_id STRING
修改列名
ALTER TABLE `Db.Table` CHANGE user_id new_user_id INT
修改列名后改变列在表中的位置
放在最前:
ALTER TABLE `Db.Table` CHANGE user_id new_user_id INT FIRST
放在列 uuid 后:
ALTER TABLE `Db.Table` CHANGE user_id new_user_id INT AFTER uuid
hive 新增分区
ALTER TABLE `Db.Table` ADD PARTITION ( ptdate='2017-09-28')
LOCATION 'hdfs://localhost:8020/user/test/logs/a/2017-09-28';
hive 删分区
ALTER TABLE `Db.Table` DROP PARTITION ( ptdate='2017-09-28')
删表
清空全表数据
TRUNCATE TABLE `Db.Table`
清空表指定 partition 数据
TRUNCATE TABLE `Db.Table` PARTITION (ptdate='2017-09-28')
hive 删表
DROP TABLE IF EXISTS `Db.Table`
写入数据到表
文件数据写入
# `OVERWRITE` 表示覆盖原表 partition
LOAD DATA INPATH "hdfs://localhost:8020/user/test/logs/test.txt"
OVERWRITE INTO TABLE `Db.Table` PARTITION (ptdate='2017-09-28')
注意:test.txt 文件格式要符合建表时 ROW FORMAT 配置, eg: 使用上面建表的 ROW FORMAT 配置,则下表中 array 类型 的 ip 和 map 类型的 request 格式如下:
| user_id(int) | \t | created(int) | \t | ip(array<string>) | \t | request(map<int:int>) |
|---|---|---|---|---|---|---|
| 123 | 456 | 11.11.11.11,22.22.22.22 | 1:1,2:2 |
查询结果写入
# `OVERWRITE` 表示覆盖原表 partition
INSERT OVERWRITE TABLE `Db.Table` PARTITION (ptdate='2017-09-28')
SELECT user_id, created, ip, request
FROM `Db.TableSource`
WHERE ptdate='2017-09-28' and user_id=123
or
FROM `Db.TableSource`
INSERT OVERWRITE TABLE `Db.Table` PARTITION (ptdate='2017-09-28')
SELECT user_id, created, ip, request
WHERE ptdate='2017-09-28' and user_id=123
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。