2017-02-16 4 views
1

J'essaie d'exécuter la commande de copie qui remplit la base de données en fonction de la concaténation du fichier csv, mais une colonne doit être codée en dur.vertica exécution de la commande de copie avec la valeur par défaut

Table des noms de colonnes sont:

col1,col2,col3 

contenu du fichier est (seulement les numéros, les noms sont les noms de colonnes db):

1234,5678,5436 

Ce que j'ai besoin est un moyen d'insérer des données disent comme ceci: basé sur mon exemple:

Je veux mettre dans le db:

col1 col2 col3 
1234 5678 10 

Avis: 10 comme hardcoded, en ignorant la valeur réelle de col3 à db

Dois-je utiliser FILLER? si oui, quelle est la commande?

mon point de départ est:

COPY SAMPLE.MYTABLE (col1,col2,col3) 
FROM LOCAL 'c:\\1\\test.CSV' 
UNCOMPRESSED DELIMITER ',' NULL AS 'NULL' ESCAPE AS '\' RECORD TERMINATOR ' ' ENCLOSED BY '"' DIRECT STREAM NAME 'Identifier_0' EXCEPTIONS 'c:\\1\\test.exceptions' 
REJECTED DATA 'c:\\1\\test.rejections' ABORT ON ERROR NO COMMIT; 

Pouvez-vous aider comment charger ces colonnes (essentiellement col3)?

Merci

Répondre

2

Vous devez simplement utiliser une charge factice pour analyser (mais ignorer) la 3ème valeur dans votre csv. Ensuite, vous devez utiliser AS pour faire une expression pour affecter la troisième colonne de la table à un littéral.

Je l'ai ajouté à votre COPIE ci-dessous. Cependant, je ne suis pas sûr de comprendre votre paramètre RECORD TERMINATOR. Je regarderais ça un peu plus près. Peut-être que vous avez eu un problème de copier/coller ou quelque chose.

COPY SAMPLE.MYTABLE (col1, col2, dummy FILLER VARCHAR, col3 AS 10) 
FROM LOCAL 'c:\1\test.CSV' UNCOMPRESSED DELIMITER ',' 
NULL AS 'NULL' ESCAPE AS '\' RECORD TERMINATOR ' ' 
ENCLOSED BY '"' DIRECT STREAM NAME 'Identifier_0' 
EXCEPTIONS 'c:\1\test.exceptions' REJECTED DATA 'c:\1\test.rejections' 
ABORT ON ERROR NO COMMIT;