前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive与Impala的关键字

Hive与Impala的关键字

作者头像
Fayson
修改2018-04-01 21:06:42
3.8K0
修改2018-04-01 21:06:42
举报
文章被收录于专栏:Hadoop实操Hadoop实操

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢

1.Hive的关键字


Hive有一些保留的关键字,我们在执行一些语句时,不能将这些关键字作为标识符(Identifier),比如建表语句的表名或者字段名,以下我们具体看看什么是Hive中的Identifier。

An Identifier can be a:

  • tableName
  • columnName
  • select expr alias
  • lateral view aliases
  • database name
  • view name
  • subquery alias
  • function name
  • ptf argument identifier
  • index name
  • property name for: db,tbl,partition…
  • fileFormat
  • role name
  • privilege name
  • principal name
  • macro name
  • hint name
  • window name

参考:

https://issues.apache.org/jira/secure/attachment/12618321/QuotedIdentifier.html

在Apache的Hive官网有关键字的列表,不同的Hive版本有一些区别。如下:

参考:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Keywords,Non-reservedKeywordsandReservedKeywords

如果你非要使用“保留的关键字”作为标识符,官网也给出了建议:(1)对标识符使用倒引号(backtick);(2)set hive.support.sql11.reserved.keywords=false

2.CDH的Hive关键字测试


Fayson的测试环境是CDH5.13.1,Hive为1.1,以下我们以“DATE”关键字为例,做一下简单的测试。

1.分别创建字段为DATE的表test_keywords,以及表名为DATE的表。

代码语言:txt
复制
create table test_keywords(
DATE string,
s2 string
)
row format delimited fields terminated by '#'
stored as textfile location '/fayson/test_keywords';
create table DATE(
s1 string,
s2 string
)
row format delimited fields terminated by '#'
stored as textfile location '/fayson/DATE';

可以看到都创建成功,Fayson并没有做任何额外的设置,也没有加倒引号。

2.向两个表分别插入数据。

代码语言:txt
复制
insert into table test_keywords values('1','1');
insert into table DATE values('1','1');

3.进行查询测试

代码语言:txt
复制
select * from test_keywords;
select DATE from test_keywords;
select * from DATE;
select s1 from DATE;

4.使用Impala进行查询测试

代码语言:txt
复制
invalidate metadata;
show tables;
select * from test_keywords;
select DATE from test_keywords;
select * from DATE;
select s1 from DATE;

可以发现Impala对test_keywords表select *正常,select那个DATE字段报错。对于DATE表查询select *都不行。

5.Impala查询时加上倒引号

代码语言:txt
复制
select `DATE` from test_keywords;
select * from `DATE`;
select s1 from `DATE`;

查询正常。

3.Impala的关键字


Impala同样有一些保留的关键字,跟Hive的还是有一些差别的。Impala的官网只提供了倒引号的方式来解决,如果你非要使用保留的关键字作为标识符的话。以下是部分Impala的保留关键字。

具体请参考:

https://www.cloudera.com/documentation/enterprise/latest/topics/impala_reserved_words.html#reserved_words_current

Impala官网同时还给出了计划内的一些保留关键字,即在Impala以后的版本中会变为保留关键字,所以我们在使用时也需要注意,可以提前做一些规划。部分如下:

具体请参考:

https://www.cloudera.com/documentation/enterprise/latest/topics/impala_reserved_words.html#reserved_words_planning

4.Impala的关键字测试


1.分别创建字段为DATE的表test_keywords,以及表名为DATE的表。注意必须使用倒引号,否则会报错。

代码语言:txt
复制
drop table test_keywords;
drop table `DATE`;
create table test_keywords(
DATE string,
s2 string
)
row format delimited fields terminated by '#'
stored as textfile location '/fayson/test_keywords';
create table DATE(
s1 string,
s2 string
)
row format delimited fields terminated by '#'
stored as textfile location '/fayson/DATE';

2.向两个表分别插入数据。

代码语言:txt
复制
insert into table test_keywords values('1','1');
insert into table `DATE` values('1','1');

3.使用Impala进行查询。

代码语言:txt
复制
select * from test_keywords;
select `DATE` from test_keywords;
select * from `DATE`;
select s1 from `DATE`;

一切正常

4.使用Hive进行查询

代码语言:txt
复制
select * from test_keywords;
select DATE from test_keywords;
select * from DATE;
select s1 from DATE;

Hive不用加倒引号也能执行所有查询。

5.总结


1.如果要使用Hive的保留关键字作为标识符,官网给出了两个办法:(1)对标识符使用倒引号(backtick);(2)set hive.support.sql11.reserved.keywords=false

2.CDH中的Hive不需要做任何设置,包括不用加倒引号可以直接将保留关键字作为标识符。但如果要使用Impala查询同样的表,需要加上倒引号。

3.Impala的保留关键字与Hive有一些差别,具体可以参考两个官网进行比较。

4.如果要使用Impala自己的保留关键字作为标识符,只有使用倒引号一种办法。但Hive在查询时依旧不受影响,不用加倒引号。

参考:

https://www.cloudera.com/documentation/enterprise/latest/topics/impala_reserved_words.html#reserved_words

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Keywords,Non-reservedKeywordsandReservedKeywords

如果不是非要使用关键字作为字段名啊,表名啊,就尽量别用了。徒增烦恼。

提示:代码块部分可以左右滑动查看噢 为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档