web-dev-qa-db-fra.com

Ruche insérant des valeurs dans une colonne de type tableau complexe

Je ne parviens pas à ajouter des données aux tables contenant une colonne de tableau à l'aide de l'insertion dans des instructions; le type de données est array <varchar (200)> 

Avec jodbc, je ne parviens pas à insérer des valeurs dans une colonne de tableau avec des valeurs telles que: 

INSERT INTO demo.table (codes) VALUES (['a','b']);

ne reconnaît pas les signes "[" ou "{".

Utiliser la fonction array comme ...

INSERT INTO demo.table (codes) VALUES (array('a','b'));

J'obtiens l'erreur suivante en utilisant la fonction array:

Unable to create temp file for insert values Expression of type TOK_FUNCTION not supported in insert/values

J'ai essayé la solution de contournement ...

INSERT into demo.table (codes) select array('a','b');

sans succès:

Failed to recognize predicate '<EOF>'. Failed rule: 'regularBody' in statement

Comment puis-je charger des données de tableau dans des colonnes à l'aide de jdbc?

8
Salvador Aceves

Ma table a deux colonnes: a STRING, b ARRAY<STRING>

Lorsque j'utilise la méthode de @Kishore Kumar Suthar, j'ai compris ceci: 

FAILED: ParseException line 1:33 cannot recognize input near '(' 'a' ',' in statement

Mais je trouve un autre moyen, et cela fonctionne pour moi:

INSERT INTO test.table 
SELECT "test1", ARRAY("123", "456", "789") 
FROM dummy LIMIT 1;

dummy est une table comportant au moins une ligne.

5
White

crée une table dummy qui a au moins one row.

INSERT INTO demo.table (codes) VALUES (array('a','b')) from dummy limit 1;

Hive> select codes demo.table;
OK
["a","b"]
Time taken: 0.088 seconds, Fetched: 1 row(s)
2
Kishore

Supposons que j'ai un employé de table contenant les champsIDet Nom .

Je crée une autre table employee_address avec les champsIDet Adresse . L'adresse est une donnée complexe de type array (string) .

Voici comment je peux y insérer des valeurs:

insert into table employee_address select 1, 'Mark', 'Evans', ARRAY('NewYork','11th 
avenue') from employee limit 1;

Ici, l'employé de la table agit simplement comme une table factice. Aucune donnée n'en est copiée. Son schéma peut ne pas correspondre à employee_address. Ça n'a pas d'importance.

0