2017-09-11 6 views
0

쉘 (Ksh)에서 실행중인 BTEQ 스크립트가 있습니다. 목표은으로, 은 .csv 파일로 Teradata 테이블의 내용을 내 보냅니다. 문제 데이터를 내보내는 동안 열 사이에 너무 많은 공백이 삽입되었습니다. 시도했습니다
1. 개별 열 자르기
2. 캐스팅을 사용하여 Char의 각 열 데이터 유형을
으로 변환하지만이 중 아무 것도 도움이되지 않습니다.
BTEQ 코드는 다음과 같이 (I 파일 헤더를 필요로하기 때문에 나는이 보고서 파일을 사용하고 있습니다. 보이는
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과 Col2의이 them.Any 도움말 사이의 공백을 많이 가지고있다

로 내가 그 공백을 제거하는 방법에 .이 경우 다른 작업을 수행 할 수 있습니까? 이러한 문자는 크기가 다양하므로 이름을 줄일 수 없습니다.

col1과 col2는 쉼표로 구분 된 이름이기 때문에 여기에 '' '를 추가했습니다. .csv 파일 형식이 적절하지 않은 표현이 필요합니다.

+0

질문에 샘플 데이터를 포함하십시오. – zarruq

+0

테스트하지 않았거나, 아마도 이것을 시도해보십시오 :'.SET SEPARATOR "#"를 선택하십시오. 분리기 주위의 모든 공백을 제거하십시오. 모든 큰 따옴표를 두 개로 바꾸십시오 (CSV 형식으로 이스케이프 처리). 모든 필드 주위에 큰 따옴표를 넣으십시오 (행의 시작, 행의 끝 및 구분 기호의 양쪽에). 그리고 sep를 원하는 것으로 바꾸십시오. 'sed 's/"/" "/ g; s /^.*$/"&"/; s/* # */","/ g "와 같은 것입니다. –

답변

1

REPORT 형식은 인쇄용, 즉 고정 너비 + 분리 기호입니다.

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; 

또는 TPT & DELIMITED 형식으로 전환 :

seperators를 추가하고 다음과 같이보다 효율적으로 사용 CSV을 인용하지 않고 쉼표 delimted 데이터를 생성합니다.