我目前正在尝试将dashDB数据库与db2cli实用程序和ODBC一起使用(值来自dashDB Web控制台上的Connect / Connection Information)。此时我可以完美地执行SELECT
或INSERT
语句并从我创建的自定义表中获取数据,这要归功于以下命令:
db2cli execsql -connstring "DRIVER={IBM DB2 ODBC DRIVER - IBMDBCL1}; DATABASE=BLUDB; HOSTNAME=yp-dashdb-small-01-lon02.services.eu-gb.bluemix.net; PORT=50000; PROTOCOL=TCPIP; UID=xxxxxx; PWD=xxxxxx" -inputsql /tmp/input.sql
现在我正在尝试通过db2cli实用程序执行DB2 LOAD操作,但我不知道如何继续,或者即使有可能这样做。 目的是从文件导入数据,而不是在我这边编目DB2 dashDB数据库,而只是通过ODBC。有人知道这种操作是否可行(使用db2cli或其他实用程序)?
答案 0 :(得分:1)
here提供了从DB2 on Cloud(ex DashDB)仪表板引用的最新API版本。它首先需要调用 / auth / tokens 端点,以根据您的Bluemix凭证生成一个用于认证API调用的auth令牌。
我最近发布了一个npm模块-db2-rest-client-以简化这些操作的使用。例如,要从.csv文件加载数据,可以使用以下命令:
# install the module globally
npm i db2-rest-client -g
# call the load job
export DB_USERID='<USERID>'
export DB_PASSWORD='<PASSWORD>'
export DB_URI='https://<HOSTNAME>/dbapi/v3'
export DEBUG=db2-rest-client:cli
db2-rest-client load --file=mydata.csv --table='MY_TABLE' --schema='MY_SCHEMA'
对于装入作业,在专用于70MB源文件和约400万行的Bluemix上进行的测试耗时约4分钟。还有其他CLI选项,例如执行export语句,逗号分隔的语句和上传文件。
答案 1 :(得分:0)
答案 2 :(得分:0)
这是不可能的。 LOAD
不是SQL语句,因此它不能通过SQL接口(如ODBC)执行,只能使用DB2 CLP,而DB2 CLP又需要编目数据库。
ADMIN_CMD()
可以通过SQL接口调用,但是,它要求输入文件在服务器上 - 它不会使用存储在您的文件中的文件工作站。
如果JDBC是一个选项,您可以使用CLPPlus IMPORT
command。
答案 3 :(得分:0)
我使用过REST API,但没有看到任何大小限制。在dashDB本地(仓库数据库)的ver 1.11中,包含了外部表。只要文件在容器上就可以加载。此外,DB2 Load会锁定表,直到加载完成,而外部表加载不会
答案 4 :(得分:0)
有多种方法可以将数据获取到Cloud上的Db2 Warehouse中。您可以从命令行使用Lift CLI https://lift.ng.bluemix.net/,该CLI为大型数据集提供最佳性能
您还可以使用EXTERNAL TABLE
的{{3}},它们也是高性能的并且有很多选择
这是一个使用本地文件(不在服务器上)的快速示例,因此使用了REMOTESOURCE YES
选项
db2 "create table foo(i int)"
echo "1" > /tmp/foo.csv
db2 "insert into foo select * from external '/tmp/foo.csv' using (REMOTESOURCE YES)"
db2 "select * from foo"
I
-----------
1
1 record(s) selected.
对于大文件,您可以随时使用gzip
db2 "insert into foo select * from external '/tmp/foo.csv' using (REMOTESOURCE GZIP)"
或通过gzip压缩的文件
gzip /tmp/foo.csv
db2 "insert into foo select * from external '/tmp/foo2.csv.gz' using (REMOTESOURCE YES)"