We have noticed production job failures where customer upgraded their hive from .14 (HDP 2.1) to the latest version(>1.2.x) and resulted in critical jobs failing (not to mention the severity 1 case). This is due to the changes in the reserved words between the source and target hive versions.
For example, Word 'date' is not a reserved word in Hive.14 but inHive 1.2.1 it is. Same is the case with REGEXP and RLIKE.
This would be the best option though code change is required. To illustrate option 1,
For example,
With word "user" being a keyword, We can use it as an identifier like the below SQL.
SELECT createddate, `user`.screenname FROM twitter_json4 WHERE `user`.name LIKE 'Sarah%';
The second option is quite easier to write queries.
However during the upgrade or If we need to enable the hive.support.sql11.reserved.keywords to true for some reason, then the existing queries(without using quotes) hive throws the following error
FailedPredicateException(identifier,{useSQL11ReservedKeywordsForIdentifier()}?) at org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.identifier(HiveParser_IdentifiersParser.java:11644) at org.apache.hadoop.hive.ql.parse.HiveParser.identifier(HiveParser.java:45920)
OPTION 2:
hive> set hive.support.sql11.reserved.keywords; hive.support.sql11.reserved.keywords=false
create table table (user string); ==> table and user are keywords.
OK
Time taken: 1.458 seconds
hive> desc table;
OK user
string
Time taken: 0.34 seconds,
Fetched: 1 row(s)
hive> show tables;
OK
table
Time taken: 0.075 seconds,
Fetched: 1 row(s)
hive> set hive.support.sql11.reserved.keywords=true; ===> Enabling the property.
hive> show tables;
OK table
Time taken: 0.041 seconds,
Fetched: 1 row(s)
hive> show tables;
OK table
Time taken: 0.039 seconds,
Fetched: 1 row(s)
hive> describe table;
FailedPredicateException(identifier,{useSQL11ReservedKeywordsForIdentifier()}?) at org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.identifier(HiveParser_IdentifiersParser.java:11644) at org.apache.hadoop.hive.ql.parse.HiveParser.identifier(HiveParser.java:45920) at org.apache.hadoop.hive.ql.parse.HiveParser.tabTypeExpr(HiveParser.java:15574)
Setting hive.support.sql11.reserved.keywords to false would allow the user to use the keywords as identifiers without hive throwing any exception. We need to be considerate of the fact that when enabling the hive.support.sql11.reserved.keywords to true would require the use of quotes to differentiate the keyword and identifier.
Feel free to get in touch with Hortonworks Support incase of any issues.