hive的字段名约束
HIVE默认是不能使用保留字(如:date)以及含有一些特殊符号(比如以_开头)作为表
的字段名的,但有时候因为特殊需求无法对字段名进行校验或更名的情况可以在建表时,
可以将某个字段用“(tab上面那个键)符号进行转义,HIVE会将所有被这种符号包裹的
字段仅作为字面量进行识别,从而避免了无法使用特殊名称的问题。
insert和load的区别
insert和load操作都可以将数据导入到hive表中,但load操作仅能从文件
系统中导入数据,是简单的copy/move操作,不涉及到任何数据格式转换,如果待导入的
文件格式与导入的HIVE表格式不一致,则会失败。其语法格式为:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
insert操作可以将某个查询语句的查询结果作为导入数据导入到某张HIVE表中,如果
数据格式不一致,HIVE会尝试执行转换,常用的语法格式为:
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;
如果想实现将HDFS中的文本数据(txt)导入到HIVE表中,并采用其它格式存储来提升存储
效率和查询性能,比如:parquet,可以采用如下步骤:
- 建立一张临时表t_temp存储格式使用TEXTFILE(STORED AS TEXTFILE);
- 使用load操作将原始文件导入到该临时表中;
- 建立正式的存储表t_data采用parquet存储格式(STORED AS parquet)
- 使用insert语法将临时表数据导入正式表:
INSERT INTO TABLE t_data select * from t_temp;
hive的超时时间
如果采用JDBC的方式连接hive,一般会采用长连接的形式,但hive内部默认了每个连接
的不活动session的超时失效时间,一旦session失效后还想尝试使用,会发生:HiveSQLException: Invalid SessionHandle错误。
Hive的Session的超时时间主要受以下三个参数的影响():
hive.server2.session.check.interval #检查session超时的间隔时间
hive.server2.idle.operation.timeout #session中某个操作最长的空闲时间,比如执行一个SQL,单位毫秒
hive.server2.idle.session.timeout #session最长的空闲时间,超过将被关闭,单位毫秒
一般来讲如果想让session永不超时,只需设置hive.server2.idle.session.timeout=0即可。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15723.html