我正在研究面向列的数据库,并遇到了Vertica。

我的需要是从C代码馈送Vertica数据库。我没有成功地从Vertica获取此信息:我被告知使用“ VSQL”和“复制”命令。我想要的就是问题 INSERT 对我的Vertica数据库的语句。

可以做到吗?

例如,在PostgreSQL中,您可以通过链接Postgres来进行“嵌入式SQL” ecpg 图书馆到您的二进制文件。我不知道Vertica是否存在这样的东西,我不知道其他方式。

有任何想法吗?

有帮助吗?

解决方案

Vertica包括一个用于C的ODBC驱动程序。

阅读“程序员>指南Vertica客户端库>编程ODBC客户端应用程序”

本节详细介绍了配置Vertica ODBC驱动程序的过程。它还说明了如何使用ODBC API在您自己的客户端应用程序中连接到Vertica。

其他提示

您确实有两个选项:您可以创建一个带有数据的划界文件,如以下内容:

row1col1data,row1col2data,row1col3data,row1col4data
row2col1data,row2col2data,row2col3data,row2col4data
row3col1data,row3col2data,row3col3data,row3col4data

然后,您可以使用复制命令和VSQL将其加载到Vertica中。如果您有数据库超级用户权限,则可以直接加载文件,使用:

vsql -U <username> -w <password> YOURDATABASENAME -c "COPY yourtablename (col1name, col2name, col3name, col4name) FROM 'yourdelimitedfile' DELIMITER ','"

省略-W,如果您想输入将密码放在bash历史记录中并在程序启动时输入它。如果您没有数据库超级用户权限,您仍然可以将文件归为VSQL并从stdin中获取数据 - 这很为什么Vertica可以防止您从没有超级用户权利的情况下从文件中加载数据,但会让任何用户将任何用户放入Via Cat中,我不知道,但是您可以按照以下方式进行操作:

cat yourdelimitedfile | vsql -U <username> -w <password> YOURDATABASENAME -c "COPY yourtablename (col1name, col2name, col3name, col4name) FROM STDIN DELIMITER ','"

或者,如果您在文件中有一堆单独的插入语句,则被半洛龙隔开,则可以通过VSQL运行文件,如下:

vsql -U <username> -w <password> YOURDATABASENAME -f pathtoyoursqlfile

但是,如果您执行超过1000行,则使用划界文件的批量加载应该更快。

希望有帮助!

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top