首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Db2客户端远程将CSV文件加载到Db2事件存储中?

如何使用Db2客户端远程将CSV文件加载到Db2事件存储中?
EN

Stack Overflow用户
提问于 2019-09-18 13:23:12
回答 2查看 904关注 0票数 0

我在Db2事件库的文档中看到,当文件在本文档https://www.ibm.com/support/knowledgecenter/en/SSGNPV_2.0.0/local/loadcsv.html中的系统中时,可以将CSV文件加载到系统中。我还发现,您可以使用Db2中的标准Db2客户机连接到How do I connect to an IBM Db2 Event Store instance from a remote Db2 instance?事件存储数据库。我现在要做的是使用这个连接加载一个CSV文件。可以远程装载吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-18 13:45:39

这应该可以使用指定的额外关键字REMOTESOURCE YES完成,例如:

代码语言:javascript
复制
db2 "INSERT INTO import_test SELECT * FROM EXTERNAL '/home/db2v111/data.del' USING (DELIMITER ',' REMOTESOURCE YES)"

参见这里的一个示例:IMPORT script on IBM DB2 Cloud using RUN SQL Interface

票数 2
EN

Stack Overflow用户

发布于 2019-10-02 20:09:30

与其他答案提到的连接和加载使用传统的db2。我必须添加一些Db2事件存储特别需要的更多细节。

假设我们使用的是Db2客户端容器,它可以在带有标记ibmcom/db2的停靠中心找到。基本上,我们必须经历以下步骤:

1/建立从db2客户端容器到远程db2事件存储数据库的远程连接

2/使用db2 CLP命令来使用db2的外部表加载特性加载csv文件,这将将csv文件从db2客户端容器加载到远程事件存储数据库。

步骤1:运行以下命令,或者在脚本中运行它。注意,这些命令需要作为db2用户在db2客户端容器中运行。db2用户名通常为db2inst1

代码语言:javascript
复制
#!/bin/bash -x
NODE_NAME=eventstore
. /database/config/db2inst1/sqllib/db2profile

### create new keydb used for authentication
# remote old keydb files
rm -rf $HOME/mydbclient.kdb  $HOME/mydbclient.sth $HOME/mydbclient.crl $HOME/mydbclient.rdb
$HOME/sqllib/gskit/bin/gsk8capicmd_64 -keydb -create -db $HOME/mydbclient.kdb -pw ${SSL_KEY_DATABASE_PASSWORD} -stash
KEYDB_PATH=/var/lib/eventstore/clientkeystore

# get the target eventstore cluster's SSL public certificate using REST api
bearerToken=`curl --silent -k -X GET "https://$IP/v1/preauth/validateAuth" -u $EVENT_USER:$EVENT_PASSWORD | python -c "import sys, json; print (json.load(sys.stdin)['accessToken']) "`

curl --silent -k -X GET -H "authorization: Bearer $bearerToken"  "https://${IP}:443/com/ibm/event/api/v1/oltp/certificate" -o $HOME/server-certificate.cert 

# insert eventstore cluster's SSL public cert into new gskit keydb
$HOME/sqllib/gskit/bin/gsk8capicmd_64 -cert -add -db $HOME/mydbclient.kdb  -pw ${SSL_KEY_DATABASE_PASSWORD}  -label server -file $HOME/server-certificate.cert -format ascii -fips

# let db2 client use the new keydb 
$HOME/sqllib/bin/db2 update dbm cfg using SSL_CLNT_KEYDB $HOME/mydbclient.kdb SSL_CLNT_STASH $HOME/mydbclient.sth

# configure connection from db2Client to remote EventStore cluster.
$HOME/sqllib/bin/db2 UNCATALOG NODE ${NODE_NAME}
$HOME/sqllib/bin/db2 CATALOG TCPIP NODE ${NODE_NAME} REMOTE ${IP} SERVER ${DB2_CLIENT_PORT_ON_EVENTSTORE_SERVER} SECURITY SSL
$HOME/sqllib/bin/db2 UNCATALOG DATABASE ${EVENTSTORE_DATABASE}
$HOME/sqllib/bin/db2 CATALOG DATABASE ${EVENTSTORE_DATABASE} AT NODE ${NODE_NAME} AUTHENTICATION GSSPLUGIN
$HOME/sqllib/bin/db2 terminate

# Ensure to use correct database name, eventstore user credential in remote 
# eventstore cluster
$HOME/sqllib/bin/db2 CONNECT TO ${EVENTSTORE_DATABASE} USER ${EVENT_USER} USING ${EVENT_PASSWORD}

一些重要变量: EVENTSTORE_DATABASE:远程事件存储集群中的数据库名

EVENT_USER: EventStore用户名远程事件存储集群

EVENT_PASSWORD: EventStore用户密码远程事件存储集群

IP:远程事件存储集群的公共IP

DB2_CLIENT_PORT_ON_EVENTSTORE_SERVER:远程事件存储集群的JDBC端口,通常为18730

SSL_KEY_DATABASE_PASSWORD: keystore在db2客户端容器中的gskit文件的密码,您可以随意设置它

运行上述命令后,应该在本地客户端容器和远程事件存储集群之间建立连接。

2/加载csv文件使用db2的外部表特性

在db2客户端和远程事件存储集群之间建立连接之后,我们可以向任何本地db2数据库发出db2 CLP命令。

例如:

代码语言:javascript
复制
    // establish remote connection to eventstore database
    // replace the same variables in ${} with what you used above.
    CONNECT TO ${EVENTSTORE_DATABASE} USER ${EVENT_USER} USING ${EVENT_PASSWORD}
    SET CURRENT ISOLATION UR

    // create table in the remote eventstore database
    CREATE TABLE db2cli_csvload (DEVICEID INTEGER NOT NULL, SENSORID INTEGER NOT NULL, TS BIGINT NOT NULL, AMBIENT_TEMP DOUBLE NOT NULL, POWER DOUBLE NOT NULL, TEMPERATURE DOUBLE NOT NULL, CONSTRAINT "TEST1INDEX" PRIMARY KEY(DEVICEID, SENSORID, TS) INCLUDE (TEMPERATURE)) DISTRIBUTE BY HASH (DEVICEID, SENSORID) ORGANIZE BY COLUMN STORED AS PARQUET

    // external table load to remote eventstore database
    INSERT INTO db2cli_csvload SELECT * FROM EXTERNAL '${DB_HOME_IN_CONTAINER}/${CSV_FILE}' LIKE db2cli_csvload USING (delimiter ',' MAXERRORS 10 SOCKETBUFSIZE 30000 REMOTESOURCE 'YES' LOGDIR '/database/logs' )

    CONNECT RESET
    TERMINATE

有关更多信息,您可以查看Db2事件商店的公共github。https://github.com/IBMProjectEventStore/db2eventstore-IoT-Analytics/tree/master/db2client_remote/utils

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57993828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档