如何通过 SQL Workbench 将 Amazon Redshift 输出保存到本地 CSV?

Posted

技术标签:

【中文标题】如何通过 SQL Workbench 将 Amazon Redshift 输出保存到本地 CSV?【英文标题】:How to save Amazon Redshift output to local CSV through SQL Workbench? 【发布时间】:2017-10-22 14:51:30 【问题描述】:

我正在通过 Amazon Redshift 编写 psql,现在我正在尝试在 SQL Workbench 上通过 PSQL 查询将输出保存为 CSV 我打算通过查询而不是使用select子句然后右键单击将输出保存为csv的原因是因为有大量数据,我发现如果我将输出生成到临时表中,它比使用select 显示所有输出要快得多。因此,我在想是否保存到本地 CSV 也可以更快。

我尝试了***解决方案here,但是它在 Amazon Redshift 上不起作用,当我使用Copy (SELECT col1, col2 FROM my_table) TO '[my local csv path]' WITH CSV DELIMITER ','; 或尝试\Copy 时,它一直显示给我

亚马逊无效操作:“(”或附近的语法错误

亚马逊无效操作:“\”处或附近的语法错误

然后我检查了Amazon Redshift query tutorial,没有找到任何可以将输出保存到本地 CSV 的子句。貌似COPY是从Amazon数据源复制数据到Redshift,UNLOAD是保存数据到s3,但我只是想把数据保存在本地机器上。

那么,有什么方法可以将 Redshift 输出 保存到我的本地 CSV 但使用 SQL Workbench?

【问题讨论】:

【参考方案1】:

有,试试这个。

PGPASSWORD=<password> psql -h <host> -d <db> -U <user> -p 5439-a -c "select * from <table>" -F '<delimiter>' -o temp.csv

【讨论】:

非常感谢!我的数据是临时表,我正在使用 SQL WorkBench。所以在这种情况下使用终端可能不起作用。刚刚补充说我在问题中使用SQL WorkBench。有什么方法可以通过 SQL WorkBench 编写 psql 查询并将输出保存到本地 CSV? 我不是工具使用方面的专家,但我发现一旦您在工作台中设置了结果,您可以使用菜单选项数据 -> 将数据另存为 -> 保存数据?,顺便说一句,redshift 没有支持所有postgres方式的加载和卸载 我不能通过工作台使用“另存为”是因为select 子句可以在那里永远运行,但保存到文件可以更快......这就是我要求任何可用的查询〜无论如何,谢谢您的帮助!【参考方案2】:

尝试在工作台中运行以下任何一项

WbExport -type=text
         -file='C:\Downloads\myData.txt'
         -delimiter='\t'
         -decimal=','
         -dateFormat='yyyy-MM-dd';
select a, b ,c from myTable;

WbExport -type=text
     -file='C:\Downloads\myQuery.txt'
     -delimiter='\t'
     -header=true
     -tableWhere="WHERE a is not null and date between 11/11/11 and 22/22/22"
     -sourcetable=mytable;

【讨论】:

我对您的解决方案做了一些小改动,最后它对我有用。你能在-dateFormat='yyyy-MM-dd' 后面加上; 吗?否则它将无法正常工作。非常感谢! 我使用了您提供的第一个解决方案,但收到以下错误:“错误 [42601] [Amazon][Amazon Redshift] (30) 尝试执行查询时出错:[SQLState 42601]错误:“WbExport”第 1 行或附近的语法错误:WbExport -type=text ^”。有什么见解吗?谢谢! @CathyQian 能不能把它放在一行里看看错误信息有没有改善 rr 如果你能发布你的简写查询,【参考方案3】:

我知道您的问题是关于 Workbench,但如果您愿意在 linux 上使用命令行,这可能是一个解决方案,它对我们很有效

#!/bin/zsh 
#we are assuming you are not appending to each file and you don't need header
out_put='/tmp/output.csv'
#be very careful here rm -rf is very dangerous 
rm -rf $out_put

PGPASSWORD='YOUR_PASSWORD' psql -h YOUR_STUFF-cluster-1.YOUR_STUFF.us-east-1.redshift.amazonaws.com -p YOUR_PORT_NUMBER -d YOUR_DATABASE -U YOUR_USER_NAME -A -t -c "select * from SOME_TABLE limit 10" -F ',' -o $out_put


echo "your file is ready" $out_put

【讨论】:

以上是关于如何通过 SQL Workbench 将 Amazon Redshift 输出保存到本地 CSV?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Workbench/J:运行 SQL 文件

使用 Workbench 迁移向导通过 ssh 将 MS SQL Server 数据库迁移到 MySQL

如何在 MySQL Workbench 中执行多个 SQL 查询?

如何在我的 redshift / SQL Workbench 连接中找到 AUTOCOMMIT 的当前值?

将 MySQL Workbench 与 Google Cloud SQL 连接起来

如何在 SQL Workbench/J 中自定义 SQL 关键字