HIVE使用时的问题记录

hive的字段名约束

HIVE默认是不能使用保留字(如:date)以及含有一些特殊符号(比如以_开头)作为表
的字段名的,但有时候因为特殊需求无法对字段名进行校验或更名的情况可以在建表时,
可以将某个字段用``(tab上面那个键)符号进行转义,HIVE会将所有被这种符号包裹的
字段仅作为字面量进行识别,从而避免了无法使用特殊名称的问题。

insert和load的区别

insertload操作都可以将数据导入到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,可以采用如下步骤:

  1. 建立一张临时表t_temp存储格式使用TEXTFILE(STORED AS TEXTFILE);
  2. 使用load操作将原始文件导入到该临时表中;
  3. 建立正式的存储表t_data采用parquet存储格式(STORED AS parquet)
  4. 使用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即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值