2016-11-13 18 views
1

我有3列的SQL表作爲這樣的:換位,然後導出表到CSV文件

enter image description here

我還想寫在亞馬遜紅移腳本(使用PostgreSQL的8.0.2我相信)將上述表格導出爲CSV文件。通過轉置我的意思是我想爲CSV文件中的每個cobrand創建一個新列(cobrand_id列中有4個不同的值)。爲了說明我想要什麼,我包括一個圖像(值只是說明!):

enter image description here

當我嘗試:

COPY temp_08.jwn_calc TO 'P:/SQL_New/products_199.csv' DELIMITER ',' CSV HEADER; 

我得到錯誤:[42601]錯誤:語法錯誤達到或接近 「頭」 的位置:74

當我刪除 「CSV頭」,我得到錯誤:[0A000] ERROR:COPY TO從Xen的表格文件不支持

幫助我謝謝!

+0

能否請你澄清你的問題?你在問如何轉置數據?或者如何從Redshift導出?或者導入Redshift? –

+0

@JohnRotenstein導出轉置的數據,如果我沒有弄錯 – Blag

+0

我試圖導出使用postgreSQL上述轉置的時尚數據。我試圖以CSV文件的形式將數據導出到本地PC上。 – ZJAY

回答

1

調換

要轉置數據,你必須編寫一個查詢,特別指定每一列,如:

SELECT 
    qqyy as "Quarter", 
    SUM(CASE WHEN cobrand_id = 10001372 THEN sum END) as "10001372", 
    SUM(CASE WHEN cobrand_id = 10005244 THEN sum END) as "10005244", 
    SUM(CASE WHEN cobrand_id = 10005640 THEN sum END) as "10005640", 
    SUM(CASE WHEN cobrand_id = 10006164 THEN sum END) as "10006164" 
FROM input_table 
GROUP BY qqyy 
ORDER BY qqyy 

SAVING

COPY命令在Amazon Redshift中可以加載以下數據:

  • 亞馬遜S3
  • 亞馬遜DynamoDB
  • 卓越亞馬遜EMR集羣
  • Linux主機上運行SSH

如果您希望將數據加載到紅移,你應該把一個CSV(或壓縮的CSV )到Amazon S3存儲桶中並且use the COPY command to import the data

如果您想export從Redshift,use the UNLOAD command to created zipped CSV files in Amazon S3的數據。無法通過UNLOAD命令直接從Redshift下載結果。或者,您的計算機上本地運行的SQL客戶端可能會將保存查詢結果保存到文件中。

您收到的錯誤是由於您試圖訪問Redshift主機(P:/SQL_New/products_199.csv)的文件系統。這是不允許的,因爲您沒有登錄主機的權限。

如果你已經擁有的數據轉換到你想要的SQL查詢,使用UNLOAD命令導出它:

UNLOAD ('SELECT...FROM...') CREDENTIALS ... TO 's3://my-bucket/output.csv' 
+0

嗨,約翰 - 我正在通過SQL IDE訪問Redshift。我需要代碼來轉置數據,如圖所示,最好使用SQL。我想將數據保存到(P:/SQL_New/products_199.csv)的路徑位於我的個人電腦上。 – ZJAY

+0

謝謝@ John Rotenstein,但我正在將數據導出到本地/個人電腦,而不是S3。 P:/ drive是我電腦上的一個驅動器。 – ZJAY

+0

您*不能*導出到本地驅動器。唯一的方法是將'UNLOAD'卸載到Amazon S3存儲桶,然後從那裏下載。唯一的選擇是保存來自SQL IDE的查詢結果。 –

0

如果您需要在腳本中運行這個,你可以使用PSQL ,格式化查詢以打印csv,並將結果輸出到文件。喜歡的東西:

psql -t -h HOST -p 5439 -U USER -d DBNAME -o "P:/SQL_New/products_199.csvaf" -c \ 
"SELECT 
    qqyy || ',' || 
    SUM(CASE WHEN cobrand_id = 10001372 THEN sum END) || ',' || 
    SUM(CASE WHEN cobrand_id = 10005244 THEN sum END) || ',' || 
    SUM(CASE WHEN cobrand_id = 10005640 THEN sum END) || ',' || 
    SUM(CASE WHEN cobrand_id = 10006164 THEN sum END) 
FROM input_table 
GROUP BY qqyy 
ORDER BY qqyy" 

如果您正在計劃這個腳本,你需要配置你的密碼〜/ .pgpass