Greenplum 数据库版本:PostgreSQL 8.2.15(Greenplum 数据库 4.2.3.0 build 1)
SQL Server 数据库版本:Microsoft SQL Server 2008 R2 (SP1)
我们目前的做法:
1) 将每个表从 SQL Server 导出到平面文件
2) 使用 PSQL 控制台的 psql.exe 实用程序使用 pgAdmin III 将数据加载到 Greenplum
好处...
速度:好的,但是有什么更快的吗?我们在几分钟内加载数百万行数据
自动化:好的,我们使用 VB 中的 Shell 脚本从 SSIS 包中调用此实用程序
陷阱...
可靠性:ETL 依赖于文件服务器来保存平面文件
安全性:文件服务器上有很多潜在的敏感数据
错误处理:这是一个问题。psql.exe 永远不会引发我们可以捕获的错误,即使它确实出错并且不加载任何数据或部分文件
我们还尝试了什么...
.Net Providers\Odbc Data Provider:我们使用 DataDirect 6.0 Greenplum Wire Protocol 配置了系统 DSN。DELETE 的良好性能。插入的狗太慢了。
作为参考,这是前面提到的 SSIS 中的 VB 脚本...
Public Sub Main()
Dim v_shell
Dim v_psql As String
v_psql = "C:\Program Files\pgAdmin III\1.10\psql.exe -d "MyGPDatabase" -h "MyGPHost" -p "5432" -U "MyServiceAccount" -f \\MyFileLocation\SSIS_load\sql_files\load_MyTable.sql"
v_shell = Shell(v_psql, AppWinStyle.NormalFocus, True)
End Sub
这是“load_MyTable.sql”文件的内容...
\copy MyTable from '\\MyFileLocation\SSIS_load\txt_files\MyTable.txt' with delimiter as ';' csv header quote as '"'