diff --git a/notes/Hive常用DDL操作.md b/notes/Hive常用DDL操作.md index fa111aa..d5deb75 100644 --- a/notes/Hive常用DDL操作.md +++ b/notes/Hive常用DDL操作.md @@ -1,5 +1,35 @@ # Hive常用DDL操作 + + ## 一、Database ### 1.1 查看数据列表 @@ -8,7 +38,7 @@ show databases; ``` -![hive-show-database](D:\BigData-Notes\pictures\hive-show-database.png) +
### 1.2 使用数据库 @@ -81,7 +111,10 @@ CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- ... [constraint_specification])] --列名 列数据类型 [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] --分桶表分桶规则 + [ + CLUSTERED BY (col_name, col_name, ...) + [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS + ] --分桶表分桶规则 [SKEWED BY (col_name, col_name, ...) ON ((col_value, col_value, ...), (col_value, col_value, ...), ...) [STORED AS DIRECTORIES] ] --指定倾斜列和值 @@ -128,7 +161,7 @@ CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- 使用 `desc format emp_external`命令可以查看表的详细信息如下: -![hive-external-table](D:\BigData-Notes\pictures\hive-external-table.png) +
### 2.4 分区表 @@ -240,7 +273,7 @@ CREATE TEMPORARY EXTERNAL TABLE IF NOT EXISTS emp_co LIKE emp load data local inpath "/usr/file/emp.txt" into table emp; ``` -其中emp.txt的文件内容如下,你可以直接复制粘贴,也可以到本仓库的resources目录下载对应的文件: +其中emp.txt的内容如下,你可以直接复制使用,也可以到本仓库的resources目录下载: ```txt 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800.00 20 @@ -261,7 +294,7 @@ load data local inpath "/usr/file/emp.txt" into table emp; 加载后可查询表中数据: -![hive-select-emp](D:\BigData-Notes\pictures\hive-select-emp.png) +
@@ -325,7 +358,7 @@ ALTER TABLE emp_temp ADD COLUMNS (address STRING COMMENT 'home address'); ```sql -- 清空整个表或表指定分区中的数据 -TRUNCATE TABLE table_name [PARTITION (partition_column = partition_col_value, partition_column = partition_col_value, ...)]; +TRUNCATE TABLE table_name [PARTITION (partition_column = partition_col_value, ...)]; ``` + 目前只有内部表才能执行TRUNCATE操作,外部表执行时会抛出异常`Cannot truncate non-managed table XXXX`。 @@ -350,12 +383,6 @@ DROP TABLE [IF EXISTS] table_name [PURGE]; + 外部表:只会删除表的元数据,不会删除HDFS上的数据; + 删除视图引用的表时,不会给出警告(但视图已经无效了,必须由用户删除或重新创建)。 -示例: - -```sql -`DROP TABLE [IF EXISTS] table_name [PURGE]; ` -``` - ## 五、其他命令 @@ -420,3 +447,6 @@ SHOW CREATE TABLE ([db_name.]table_name|view_name); +## 参考资料 + +[LanguageManual DDL](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL) \ No newline at end of file diff --git a/notes/Hive常用DML操作.md b/notes/Hive常用DML操作.md index 7f6d039..c5c9bfb 100644 --- a/notes/Hive常用DML操作.md +++ b/notes/Hive常用DML操作.md @@ -208,72 +208,77 @@ DELETE FROM tablename [WHERE expression] ### 4.2 示例 -1. 首先需要更改`hive-site.xml`,添加如下配置,开启事务支持,配置完成后需要重启Hive服务。 +**1. 修改配置** - ```xml - - hive.support.concurrency - true - - - hive.enforce.bucketing - true - - - hive.exec.dynamic.partition.mode - nonstrict - - - hive.txn.manager - org.apache.hadoop.hive.ql.lockmgr.DbTxnManager - - - hive.compactor.initiator.on - true - - - hive.in.test - true - - ``` +首先需要更改`hive-site.xml`,添加如下配置,开启事务支持,配置完成后需要重启Hive服务。 -2. 创建用于测试的事务表,建表时候指定属性`transactional = true`则代表该表是事务表。需要注意的是,按照[官方文档](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions)的说明,目前Hive中的事务表有以下限制: - + 必须是buckets Table; - + 仅支持ORC文件格式; - + 不支持LOAD DATA ...语句。 - - ```sql - -- 建表语句 - CREATE TABLE emp_ts( - empno int, - ename String - ) - CLUSTERED BY (empno) INTO 2 BUCKETS STORED AS ORC - TBLPROPERTIES ("transactional"="true"); - ``` -3. 插入测试数据 - - ```sql - INSERT INTO TABLE emp_ts VALUES (1,"ming"),(2,"hong"); - ``` +```xml + + hive.support.concurrency + true + + + hive.enforce.bucketing + true + + + hive.exec.dynamic.partition.mode + nonstrict + + + hive.txn.manager + org.apache.hadoop.hive.ql.lockmgr.DbTxnManager + + + hive.compactor.initiator.on + true + + + hive.in.test + true + +``` - 插入数据依靠的是MapReduce作业,执行成功后数据如下: +**2. 创建测试表** -
- -4. 测试更新和删除 - - ```sql - --更新数据 - UPDATE emp_ts SET ename = "lan" WHERE empno=1; - - --删除数据 - DELETE FROM emp_ts WHERE empno=2; - ``` - - 更新和删除数据依靠的也是MapReduce作业,执行成功后数据如下: - -
+创建用于测试的事务表,建表时候指定属性`transactional = true`则代表该表是事务表。需要注意的是,按照[官方文档](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions)的说明,目前Hive中的事务表有以下限制: + ++ 必须是buckets Table; ++ 仅支持ORC文件格式; ++ 不支持LOAD DATA ...语句。 + +```sql +CREATE TABLE emp_ts( + empno int, + ename String +) +CLUSTERED BY (empno) INTO 2 BUCKETS STORED AS ORC +TBLPROPERTIES ("transactional"="true"); +``` + +**3. 插入测试数据** + +```sql +INSERT INTO TABLE emp_ts VALUES (1,"ming"),(2,"hong"); +``` + +插入数据依靠的是MapReduce作业,执行成功后数据如下: + +
+ +**4. 测试更新和删除** + +```sql +--更新数据 +UPDATE emp_ts SET ename = "lan" WHERE empno=1; + +--删除数据 +DELETE FROM emp_ts WHERE empno=2; +``` + +更新和删除数据依靠的也是MapReduce作业,执行成功后数据如下: + +
diff --git a/notes/Hive数据查询详解.md b/notes/Hive数据查询详解.md index 25b7ce5..6f8cc0a 100644 --- a/notes/Hive数据查询详解.md +++ b/notes/Hive数据查询详解.md @@ -249,7 +249,7 @@ Hive支持内连接,外连接,左外连接,右外连接,笛卡尔连接 需要特别强调:JOIN语句的关联条件必须用ON指定,不能用WHERE指定,否则就会先做笛卡尔积,再过滤,这会导致你得不到预期的结果(下面的演示会有说明)。 -
+