Hive的HQL(2)
2016-04-17 20:50
239 查看
Hive基础(1)
Hive的HQL(2)
1. HQL的数据定义,HQL是一种SQL方言,支持绝大部分SQL-92标准。但是和SQL的差异为:不支持行级别的操作,不支持事务等。HQL的语法接近于MySQL。
2. Hive的数据库,本质仅仅是个表的目录或者命名空间。一般用数据库将生产表组织成逻辑组。
3. Hive中的表–管理表,创建表时未指定的话为默认为管理表。当删除管理表时,Hive将删除管理表中的数据和元数据。
CREATE TABLE IF NOT EXISTS test.student ( name STRING COMMENT 'student name', age INT COMMENT 'student age', cource ARRAY<STRING>, body MAP<STRING,FLOAT>, address STRUCT<STRING,CITY:STRING,STATE:STRING>) COMMENT 'the info of student' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' COLLECTION ITEMS TERMINATED BY '\002' MAP KEYS TEMINATED BY '\003' LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '/user/hive/warehouse/test.db/student';
COMMENT注释作用
ROW FORMAT DELIMITED等指定数据格式和文件存储格式。
LOCATION子句指定该表的存储位置,若不写存储在Hive默认的数据仓库目录中。
4. Hive中的表–外部表,当数据需要被多个工具(如Pig、Hive)共享时,创建一个外部表明确数据的所有权,Hive只会删除该表的元数据信息,而不会删除该表的数据。
CREATE EXTERNAL TABLE IF NOT EXISTS test.student( name STRING COMMENT, age INT COMMENT, cource ARRAY<STRING>, body MAP<STRING,FLOAT>, address STRUCT<STREET:STRING,CITY:STRING,STATE:STRING>) LOCATION '/user/test/x'
EXTERNAL TABLE 创建一个外部表
5. Hive中的表–分区表(partition),分区表可以进行水平切分,将表数据按照某种规则进行存储。
CREATE TABLE student_info( student_ID STRING, name STRING, age INT, sex STRING, father_name STRING, mother_name STRING) PARTITIONED BY (province STRING,city STRING);
PARTITIONED BY 子句指定表按照学生家庭住址的city和province字段进行分区。
/user/hive/warehouse/student_info/province=hebei/city=handan
分区的作用相当和索引类似。
Hive安全措施,设置“strict”模式,这样如果针对一个分区表的查询没有对分区进行限制的话,改作业将会被禁止提交。
单独为外部表的分区指定值和存储位置
ALTER TABLE student_info ADD PARTITION (province = hebei,city = handan) LOCATION 'hdfs://master:9000/student/hebei/handan'
外部分区表被删除,数据不会被删除。
6. 删除表 DROP TABLE test 或者 DROP TABLE IF EXISTS test
7. 修改表
表重命名 ALTER TABLE test RENAME TO test2增加、修改、删除分区
增加分区 ALTER TABLE test ADD PARTITION (x = x1, y = y2) LOCATION ‘/user/test/x1/y1’
修改分区 ALTER TABLE test ADD PARTITION (x = x1, y = y2) SET LOCATION ‘/user/test/x1/y1’
删除分区 ALTER TABLE test ADD DROP PARTITION (x = x1, y = y2)
修改列信息
ALTER TABLE test
CHANGE COLUMN id uid INT
COMMENT ‘the unique id’
AFTER name;
增加列
ALTER TABLE test ADD COLUMNS (new_col INT, new_col2 STRING);
删除或者替换列
ALTER TABLE test REPLACE COLUMNS (new_col INT, new col2 STRING);
8. HQL的数据操作 LOAD DATA
相关文章推荐
- leetcode——64——Minimum Path Sum
- Hive的HQL(2)
- 数据结构杂谈(二)简单有趣的地精排序Gnome sort
- 从神坛到地狱:再看产品众筹热潮散尽的背后
- 慕课 springmvc拦截器
- 20145237 实验二 “Java面向对象程序设计”
- HNOI2016游记
- 嵌入式复位流程与优化(2)
- RabbitMQ消息队列应用
- linux apache 2.4.20版本安装
- unsigned关键字的学习
- 专题二1008
- Java中的接口
- 第七周进度报告
- openstack之nova启动实例过程
- ZOJ3861 手机锁
- 线程控制与分离
- 逆康拓展开展开
- 仿qq侧滑删除的一个自定义View,独立的,不需要依赖其他的view
- N皇后Java算法