hive中使用sql语句需要注意的事项
2014-04-14 21:39
609 查看
最近在熟悉hive,使用hive中的sql语句过程中出现了一些问题。
1,hive中的insert into语句
从上面可以看出,hive是不支持insert into 语句的
2,不支持Date和DateTime类型
3,hive的表分为外部表和内部表
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。
在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
4,hive中两个表链接时和以前有些不同
8,hive中在不需要全局排序的情况下,写排序语句时,最好用distribute by 表名.字段名 sort by 表名.字段名 asc | desc 的形式,尽量不用order by形式(只通过一个reduce来完成所有的排序结果)
1,hive中的insert into语句
hive> select * from t_hive2; OK 16 2 3 61 12 13 41 2 31 17 21 3 71 2 31 1 12 34 11 2 34 Time taken: 0.218 seconds hive> insert into t_hive2 values(122,34,2); FAILED: Parse Error: line 1:12 mismatched input 't_hive2' expecting TABLE near 'into' in insert clause
从上面可以看出,hive是不支持insert into 语句的
2,不支持Date和DateTime类型
hive> alter table t_hive2 add columns (time_show Date); FAILED: Error in semantic analysis: DATE and DATETIME types aren't supported yet. Please use TIMESTAMP instead
3,hive的表分为外部表和内部表
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。
在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
4,hive中两个表链接时和以前有些不同
hive> select * > from t_hive,t_hive2 > where t_hive.a=t_hive2.b; FAILED: Parse Error: line 2:11 mismatched input ',' expecting EOF near 't_hive'5, 内置函数查看命令(show functions;desc function 函数名)
hive> desc function when; OK There is no documentation for function 'when' Time taken: 0.095 seconds hive> desc function rand; OK rand([seed]) - Returns a pseudorandom number between 0 and 1 Time taken: 0.078 seconds6,hive中不支持truncate table 表名的形式存在(也包括 delete from 表名),可通过 hive>dfs -rmr /user/hive/warehouse/表名来清空该表下的数据,以便保持表元数据信息不丢失;或者通过create table 表名 like 表名,也可以。
hive> truncate table t_hive; FAILED: Parse Error: line 1:0 cannot recognize input near 'truncate' 'table' 't_hive' hive> delete from table t_hive; Usage: delete [FILE|JAR|ARCHIVE] <value> [<value>]*7,hive中不支持 in (子查询语句),比如: in (select id from 表名) .可以通过内连接或者 半连接 from 表1 left semi join 表2 on (表1.列名 = 表2.列名),表2只能在on中出现,不能在select中引用
8,hive中在不需要全局排序的情况下,写排序语句时,最好用distribute by 表名.字段名 sort by 表名.字段名 asc | desc 的形式,尽量不用order by形式(只通过一个reduce来完成所有的排序结果)
相关文章推荐
- 使用sql语句备份和恢复SQLserver数据库,以及需要注意的事项
- 数据库中的增删改查、以及sql语句在android中的使用注意事项、保存头像到本地方法
- 使用 聚合函数(aggregate function)时,SQL语句的返回值的注意事项
- 学习使用mysql需要注意的几个sql语句
- Lambda表达式Contains方法(等价于SQL语句中的like)使用注意事项
- SQL语句中ROWNUM和ORDER BY一起使用时的注意事项
- asp的SQL语句中and和or同时使用的注意事项
- ADO.NET访问ACCESS数据库是SQL语句的通配符使用注意事项
- DB2数据库中SQL语句中使用or和and的关键字的时候注意事项
- 【MySQL】MySQL学习之-设计高性能SQL语句需要注意事项
- MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 用$传参时,直接将参数的值放在sql语句中,如:
- access中使用SQL语句需要注意的几个地方
- Hibernate使用sql语句查询,返回实体类型的方法及注意事项
- access中使用SQL语句需要注意的几个地方
- 使用匿名名称空间需要注意事项
- 使用SqlParameter.SqlDbType和SqlParameter.Size时需要注意的地方
- Linq to SQL Profiler使用注意事项——无限制的结果返回
- foreach语句使用需要注意的几点
- 使用auto_ptr需要注意的事项
- [Oracle PL/SQL]当数据表设计成具有父ID的时候,当需要选择所有与父ID同根生的所有节点的时候,使用的SQL语句