hive关键字在mysql_Hive与Impala的关键字

本文探讨了Hive和Impala的关键字使用,包括Hive如何处理保留关键字,如无需额外设置即可直接使用,而Impala则需要使用倒引号。同时通过测试展示了在不同场景下,Hive和Impala对关键字作为表名和字段名的查询行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

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版本有一些区别。如下:

dbf8791d14b5d77b76872f94ee230631.png

参考:

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的表。

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';

a72831c15a611c55a2d7c7ea59f878b8.png

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

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

insert into table test_keywords values('1','1');

insert into table DATE values('1','1');

2837377875ed2b068389182c5a11e0e3.png

3.进行查询测试

select * from test_keywords;

select DATE from test_keywords;

select * from DATE;

select s1 from DATE;

40d4cc76645a4770fa5d1152e7a9ffd1.png

4.使用Impala进行查询测试

invalidate metadata;

show tables;

select * from test_keywords;

select DATE from test_keywords;

select * from DATE;

select s1 from DATE;

c9635392b209701e4aa16dcaee58efe6.png

b37afe41147b08e514569a2ffac8e789.png

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

5.Impala查询时加上倒引号

select `DATE` from test_keywords;

select * from `DATE`;

select s1 from `DATE`;

3a768154494ec586ed153d9364b098e5.png

查询正常。

3.Impala的关键字

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

aad6dbc86b1b891aa94bdf9fa020b4a2.png

具体请参考:

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

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

d2e3f538a030b8c3fdfd665eaac903b4.png

具体请参考:

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

4.Impala的关键字测试

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

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';

8e0bc22cc91922a1ae01e807d2ec4788.png

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

insert into table test_keywords values('1','1');

insert into table `DATE` values('1','1');

c65dfe9cd21871d45b22f3d08b7776da.png

3.使用Impala进行查询。

select * from test_keywords;

select `DATE` from test_keywords;

select * from `DATE`;

select s1 from `DATE`;

58ca513fda5e4343eb3b0586ae2c948e.png

一切正常

4.使用Hive进行查询

select * from test_keywords;

select DATE from test_keywords;

select * from DATE;

select s1 from DATE;

bad4f45a2616e7bdda65a8035b0a572f.png

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

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

2c6c3bc2a57553cd2dfa86b07b01c81c.png

2c6c3bc2a57553cd2dfa86b07b01c81c.png

2c6c3bc2a57553cd2dfa86b07b01c81c.png

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值