2017-09-11 2 views
0

J'ai un script BTEQ que je lance à partir de shell (Ksh). Objectif est exporter le contenu d'une table Teradata vers un fichier .csv. Problème est lors de l'exportation de données que trop d'espaces blancs sont introduits entre les colonnes. J'ai essayé
1. Découper des colonnes individuelles
2. En utilisant Cast pour convertir chaque type de données de colonne dans Char
mais rien de tout cela ne semble aider.
code BTEQ ressemble à quelque chose comme ça (je l'ai utilisé le fichier de rapport depuis que je dois les en-têtes de fichier.Whitespaces entrant lors de l'exportation de données à partir du fichier Teradata BTEQ

.EXPORT REPORT FILE = exportfilepath.csv; 
.SET SEPARATOR ","; 
.SET TITLEDASHES OFF; 
.set RECORDMODE OFF; 
.set width 65531; 
.SET ERRORLEVEL 3807 SEVERITY 0 

select 
    trim('"' || trim(cast(col1 as char(256))) || '"') AS col1, 
    trim('"' || trim(cast(col2 as char(256))) || '"') AS col2, 
    trim(cast(col3 as INTEGER)) AS col3, 
    trim(cast(col4 as char(6))) AS col4, 
    trim(col5) AS col5, 
    trim(cast(col6 as decimal(18,2)) AS col6, 
    trim(date) AS date 
from table A; 

Col1 et Col2 ont de beaucoup d'espaces blancs entre them.Any aide à comment je peux supprimer ces espaces blancs Que puis-je faire d'autre dans ce cas? Je ne peux pas diminuer la taille de caractère car ce sont des noms avec des tailles variables

J'ai ajouté '"' ici parce que col1 et col2 sont des noms avec une virgule entre eux. Fichier .csv doit formulé le format n'est pas correct.

+0

Veuillez inclure des exemples de données dans votre question. – zarruq

+0

N'a pas testé, peut-être essayer ceci: Choisissez un '.SET SEPARATOR" # "' qui n'est pas dans votre sortie normale. Retirez tous les espaces autour du SEPARATOR. Remplacez toutes les guillemets par deux d'entre eux (en les échappant au format csv). Mettez des guillemets autour de tous les champs (début de ligne, fin de ligne et des deux côtés du séparateur). Et remplacez le sep avec celui que vous voulez. Quelque chose comme 'sed 's /"/""/g; s/^.*$/ "&"/; s/* # * /", "/ g''. –

Répondre

1

Le formatest pour l'impression, c'est-à-dire la largeur fixe plus le séparateur.

Pour générer des données par des virgules delimted sans ajouter seperators et citant une meilleure utilisation CSV comme ceci:

WITH CTE AS 
(SELECT col1,col2,col3,col4.col5,col6,current_date as dt 
    FROM table A 
) 
SELECT str (title '') 
FROM TABLE 
    (CSV(NEW VARIANT_TYPE(cte.col1,cte.col2,cte.col3 
         ,cte.col4.cte.col5,cte.col6 
         ,cte.dt), ',', '"' 
    ) RETURNS (str varchar(32000) CHARACTER SET UNICODE) 
) AS t1; 

Ou passer au format TPT & DELIMITED.