Csaba Ringhofer created IMPALA-11587:
----------------------------------------

             Summary: Improve handling of special chars in column names
                 Key: IMPALA-11587
                 URL: https://issues.apache.org/jira/browse/IMPALA-11587
             Project: IMPALA
          Issue Type: Improvement
          Components: Catalog, Frontend
            Reporter: Csaba Ringhofer


Hive can several special characters in column names if it is quoted with ' ':
create table tspeccharcol (`@"!£"!$%^=&)(-` int);

The table above can be used by Impala, but there are some caveats:
- Impala returns an error for a similar column name: Invalid column/field name
- SHOW CREATE TABLE in Impala does not quote the column, so it will return a 
statement that is not executable in Hive (Hive quotes it correctly)

I am not sure whether we should accept all these special characters - the 
original question why I investigate this was asking for @.

The error is returned due to a Hive function:
https://github.com/apache/impala/blob/cfd79b40beab86f08ad72e0bea41eabf736d0a99/fe/src/main/java/org/apache/impala/catalog/Hive3MetastoreShimBase.java#L166
The second paramater should be a HiveConf, which will decide whether to accept 
special chars:
https://github.com/apache/hive/blob/293a448296933b7498a91e7eeb91edc88dfaa07e/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/utils/MetaStoreUtils.java#L219

Besides this function, Hive also seems to have some other rules, e.g. : is not 
accepted:
create table if not exists tspeccharcol (`:` int);
Error: Error while compiling statement: FAILED: ParseException line 1:48 Failed 
to recognize predicate ')'. Failed rule: '[., :] can not be used in column name 
in create table statement.' in column specification (state=42000,code=40000)


Also noticed some weirdness in Hive / beeline:
While this is accepted:
create table if not exists tspeccharcol (`""` int);
these ones are not:
create table if not exists tspeccharcol (`"` int);
create table if not exists tspeccharcol (`"\"` int);

Both fail with: Error: Error while compiling statement: FAILED: ParseException 
line 1:49 extraneous input ';' expecting EOF near '<EOF>' 
(state=42000,code=40000)

Some part of the client/parser does not seem note the ' ' quoting and applies 
escaping / quoting rules to the text inside.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to