2017-05-05 1 views
1

J'utilise Ruche 2.1.1 et je tente de créer une table avec . dans un nom de colonne:Impossible d'utiliser un "." un nom de colonne de table Ruche

CREATE TABLE `test_table`(
    `field.with.dots` string 
); 

Quand je fais si je reçois:

FAILED: ParseException line 4:0 Failed to recognize predicate ')'. Failed rule: '[., :] can not be used in column name in create table statement.' in column specification 

Je dois faire quelque chose de mal parce que le hive documentation dit:

Dans 0.13.0 de libération Hive et plus tard, par les noms de colonnes par défaut peuvent être spécifiées dans les bac kticks (`) et contient tout caractère Unicode (HIVE-6013)

. est un caractère Unicode. Et idée de ce que je pourrais faire?

Pour vous donner plus de contexte, il s'agit d'un cluster Amazon EMR 5.5.0. Merci!

Répondre

3

code source: HiveParser

... 
private char [] excludedCharForColumnName = {'.', ':'}; 
... 

    private CommonTree throwColumnNameException() throws RecognitionException { 
    throw new FailedPredicateException(input, Arrays.toString(excludedCharForColumnName) + " can not be used in column name in create table statement.", ""); 
    } 

billet Jira: Disallow create table with dot/colon in column name

S'il vous plaît noter la motivation:

Puisque nous ne permettons pas aux utilisateurs de rechercher les noms de colonnes avec points dans le milieu tels que emp.no, ne permettent pas aux utilisateurs de créer une table s avec ces colonnes qui ne peut être trouvée

Il semble create table a été traitée, mais pas CTAS ni ALTER TABLE ...

hive> create table t as select 1 as `a.b.c`; 
OK 
hive> desc t; 
OK 
col_name data_type comment 
a.b.c     int           
Time taken: 0.441 seconds, Fetched: 1 row(s) 
hive> select * from t; 
FAILED: RuntimeException java.lang.RuntimeException: cannot find field a from [0:a.b.c] 

hive> create table t (i int); 
OK 
hive> alter table t change column i `a.b.c` int 
hive> select * from t; 
Error while compiling statement: FAILED: RuntimeException java.lang.RuntimeException: cannot find field a from [0:a.b.c] 

P.S.

J'ai mis à jour la documentation (cherchez colon) https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

+0

Merci, j'ai qui a permis, et, malheureusement, il ne résout pas le problème :( –

+0

Ps Pour le plaisir essayez d'utiliser un virgule (',') dans un nom de colonne, par exemple '\' a, b, c \ '' –

+0

Oui, ça marche, merci pour votre aide, c'est dommage car nous avons un schéma créé à partir de documents JSON. Je ne sais pas pourquoi Hive se soucie si le nom de la colonne est cité –