hive语法

  • 创建数据库
CREATE DATABASE IF NOT EXISTS hive;
SHOW DATABASES;
SHOW CREATE DATABASE hive;
DESCRIBE DATABASE hive;
  • 删除数据库
DROP DATABASE IF EXISTS hive CASCADE;
  • 创建表

    • 创建普通表

      CREATE TABLE IF NOT EXISTS hive_table(
          id INT COMMENT 'This is id of hive_table',
          age INT COMMENT'This is age of hive_table',
          name STRING COMMENT 'This is name of hive_table'
      )
      COMMENT 'This is hive_table'
      ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
      STORED AS TEXTFILE;
      
      CREATE TABLE hive_table AS SELECT * FROM hive;
      
      CREATE TABLE hive_table LIKE hive;
      
      SHOW TABLES '*table';
      SHOW CREATE TABLE hive_table;
      DESCRIBE hive_table;
      DESCRIBE FORMATTED hive_table
    • 创建外部表

      CREATE EXTERNAL TABLE IF NOT EXISTS hive_table(
          id INT,
          age INT,
          name STRING
      )
      ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
      STORED AS TEXTFILE;
    • 创建分区表(PARTITIONED)

      CREATE TABLE IF NOT EXISTS hive_table(
          id INT,
          age INT,
          name STRING
      )
      PARTITIONED BY(date STRING)
      ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
      STORE AS TEXTFILE;
    • 创建分筒表(BUCKETS)

      CREATE TABLE IF NOT EXISTS hive_table(
          id INT,
          age INT,
          name STRING
      )
      CLUSTERED BY (age) SORTED BY (name) INTO 16 BUCKETS
      ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
      STORE AS TEXTFILE; 
  • 修改表
-- 修改表名
ALTER TABLE hive_table RENAME TO hive_table_new;

--添加字段
ALTER TABLE hive_table ADD COLUMNS(tall INT);

--修改字段
ALTER TABLE hive_table REPLACE COLUMNS(tall int);

--删除表
DROP TABLE IF EXISTS hive_table;
  • 插入数据
INSERT OVERWRITE TABLE hive_table SELECT * FROM hive_table_ins;

INSERT VOERWRITE TABLE hive_table PARTITION(date='20161020')
SELECT * FROM hive_table_inc;

FROM hive_table_ins
INSERT OVERWRITE TABLE hive_table_1 SELECT * WHERE id = 1
INSERT OVERWRITE TABLE hive_table_2 SELECT * WHERE id = 2;
  • 表操作
-- 复制表
CREATE TABLE hive_table_bak
ROE FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORE AS TEXTFILE
AS SELECT * FROM hive_table;

-- 克隆表
CREATE TABLE hive_table_temp like hive_table;

-- 备份表(备份到hdfs上)
EXPORT TABLE hive_table PARTITION(date='2016-10-10')
to '/home/user/data_bak.txt';

-- 还原表
IMPORT TABLE hive_table_new FROM '/home/user/data_bak.txt';
  • 导入数据
-- 普通表导入本地数据
load data local inpath '/home/user/data.txt'
overwrite into table hive_table;

-- 普通表导入HDFS数据
load data inpath 'hdfs://namenode:9000/user/hive/'
overwrite into table hive_table;

-- 分区表
load data local inpath '/home/user/data.txt'
overwrite into table hive_table
partition(date='2016-10-20');

-- 分桶表
CREATE TABLE hive_table_buckets(
    id INT,
    age INT,
    name STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORE AS TEXTFILE;

LOAD DATA LOCAL INPATH '/home/user/data.txt'
INTO TABLE hive_table_buckets;

set hive.enforce.bucketing = ture;
INSERT OVERWRITE TABLE hive_table SELECT * FROM hive_table_buckets;
  • 导出数据
INSERT OVERWRITE LOCAL DIRECTORY '/home/user/data.txt'
SELECT * FROM hive_table;
  • Hive的数据类型
数据类型长度备注
TINYINT1字节的有符号整数-128~127
SMALLINT2字节的有符号整数–32768~32767
INT4字节的有符号整数-2147483648~2147483647
BIGINT8字节的有符号整数9223372016854775808~9223372036854775807
BOOLEAN布尔类型,true或falsetrue、false
FLOAT单精度浮点数
DOUBLE双精度浮点数
STRING字符串
TIMESTAMP整数
BINARY字节数组
DATE日期0000-01-01~9999-12-31,常用STRING代替

  • JOIN

    • 只支持等值连接
    • 连接谓词中不支持or
  • LEFT SEMI-JOIN(左半开连接)

  • WHERE条件
    A <=> B 当A和B都为NULL的时候返回true,其他和=一样
    A LINK B %一个或多个字符 _一个字符
    A RLIKE B 正则匹配

### HiveQL语法教程和示例 #### 创建表 为了创建一个新的表格,在Hive中可以使用`CREATE TABLE`语句。此语句允许指定列名及其相应的数据类型,还可以设置分区、分桶以及存储格式等属性[^3]。 ```sql CREATE EXTERNAL TABLE IF NOT EXISTS employee ( name STRING COMMENT '员工姓名', age INT, salary FLOAT) COMMENT '这是一个关于公司员工的信息表' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION '/user/hive/warehouse/employee'; ``` #### 插入数据到表 向已存在的表里插入新记录可以通过多种方式完成,比如直接写入静态值或者从其他表读取并加载数据。下面的例子展示了如何利用`INSERT INTO`来添加一条或多条记录: ```sql -- 单行插入 INSERT INTO employee VALUES ('John Doe', 30, 7500); -- 多行批量插入 INSERT INTO employee VALUES ('Jane Smith', 28, 6900), ('Alice Brown', 45, 12000); ``` 对于更复杂的情况,则可能需要用到`SELECT ... INSERT OVERWRITE`结构来进行跨表操作或执行转换逻辑后再存入目标位置。 #### 查询数据 基本的选择查询遵循标准SQL模式,即通过`SELECT * FROM table WHERE condition;`的形式获取所需的结果集。然而值得注意的是由于性能考虑等因素的影响,某些特定功能如索引查找并未被实现;因此建议尽可能优化过滤条件以减少扫描范围。 ```sql -- 获取所有年龄大于等于30岁的雇员名单 SELECT name FROM employee WHERE age >= 30; -- 统计各部门平均薪资水平 SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department; ``` 另外需要注意一点就是当涉及到多个大尺寸的数据源联合分析时,应当谨慎评估Join策略所带来的开销成本,并尝试采用Map-side Join或其他高效算法替代传统嵌套循环连接方法。 #### 更新与删除 遗憾地讲,目前版本下的Hive并不支持直接修改现有记录的操作(UPDATE),这意味着一旦录入错误就需要借助额外手段绕过这个限制——例如重建整个分区甚至整张表。同样地DELETE语句也不存在于官方文档之中[^2]。 #### 使用命令行客户端运行HiveQL脚本 除了交互式的shell环境外,还能够编写批处理作业提交给集群执行。此时便要用到了CLI工具所提供的选项参数,像-e用于传递单个指令字符串而-f则是指向包含一系列待解析表达式的外部文件路径。 ```bash hive -e "SHOW DATABASES;" hive -f /path/to/query.sql ``` 以上便是有关HiveQL的一些基础知识要点及实际应用案例说明。希望这些信息能帮助理解该技术框架的工作机制并对日常开发有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

風珏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值