monetdb 批量复制 |使用 python 批量复制
monetdb bulk copy | bulk copy with python
在 monetdb table 中批量导入文件加载时遇到问题。下面提供了重新创建问题的详细信息:
我已经安装了 monetdb 版本 11.19.9,python monetdb 的客户端也是 11.19.9。
创建了 dbform 并且工作正常,我已经连接到 monetdb shell 并通过 python api.
现在正在尝试导入转储的 CSV 文件,csv 文件的内容如下所示:
44444444|ALI
55555555|JAFFRI
Table 架构定义为:* "Table already have 50 million rows, while csv have only two rows"
CREATE TABLE "voc"."test" (
"id" INTEGER,
"data" VARCHAR(30)
);
- 用户名和数据库名都是"voc"
用于导入文件的命令如下所列。
root@monetdb:~# mclient -u voc -d voc -s "COPY INTO test FROM STDIN" - < test.csv
password:
NULL byte in input
root@monetdb:~# mclient -u voc -d voc -s "COPY INTO test FROM STDIN NULL AS ''" - < test.csv
password:
NULL byte in input
抛出错误 "NULL byte in input" 并且没有向 table 添加任何内容。
对于 Python 我尝试使用以下命令:
import monetdb.sql
connection = monetdb.sql.connect(username="voc", password="voc", hostname="localhost", database="voc")
cursor = connection.cursor()
cursor.execute("COPY INTO test FROM 'test.csv'")
connection.commit()
此代码抛出 Perm 异常:
COPY INTO: insufficient privileges: COPY INTO from file(s) requires database administrator rights, use 'COPY INTO "test" FROM STDIN' instead
现在我没有找到 python 代码与 STDIN 一起使用的任何示例,Monetdb 游标不提供 copy_from,这与 PostgreSQL 不同,您可以单独传递文件。 python有解决办法吗?
OS?
uname -a
Linux monetdb 3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
*** Python 示例在用户 monetdb 上运行良好,但对于终端 "NULL byte in input" 仍然存在。
mclient -u voc -d voc -s "COPY INTO test FROM STDIN" - < test.csv
对我来说很好用。 NULL byte in input
错误表示您尝试加载的文件有问题。
关于另一个问题(从Python调用COPY INTO),错误信息也很清楚。尝试以 monetdb
用户身份连接。
同样有效的是在 COPY INTO 命令之后内联要导入的 CSV 数据。示例 (Python):
cursor.execute("COPY 2 RECORDS INTO test FROM STDIN;\n44444444|AL\n55555555|JAFFRI")
这里的缺点是您需要指定要导入的记录数。
我创建了一个简单的 table (create table dept (dept_id integer, dept_nm varchar(25)) 并尝试使用 Python 并出现错误。所有执行语句都给我相同的错误消息:
connection = monetdb.sql.connect(username="monetdb", password="monetdb", hostname="10.81.102.71", port=2234, database="demo")
cursor = connection.cursor()
cursor.execute("COPY INTO dept FROM 'C:\AWS\did.csv' USING DELIMITERS;")
cursor.execute("COPY INTO dept FROM 'C:\AWS\did.csv' USING DELIMITERS")
cursor.execute("COPY INTO dept FROM STDIN;\n44444444,'AL'\n55555555,'JAFFRI'")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Q1\AppData\Local\Continuum\Anaconda2\lib\site-packages\monetdb\sql\cursors.py", line 175, in execute
block = self.connection.execute(query)
File "C:\Users\Q1\AppData\Local\Continuum\Anaconda2\lib\site-packages\monetdb\sql\connections.py", line 138, in execute
return self.command('s' + query + ';')
File "C:\Users\Q1\AppData\Local\Continuum\Anaconda2\lib\site-packages\monetdb\sql\connections.py", line 143, in command
return self.mapi.cmd(command)
File "C:\Users\Q1\AppData\Local\Continuum\Anaconda2\lib\site-packages\monetdb\mapi.py", line 202, in cmd
raise OperationalError(response[1:])monetdb.exceptions.OperationalError: 25005!current transaction is aborted (please ROLLBACK)
在 monetdb table 中批量导入文件加载时遇到问题。下面提供了重新创建问题的详细信息:
我已经安装了 monetdb 版本 11.19.9,python monetdb 的客户端也是 11.19.9。
创建了 dbform 并且工作正常,我已经连接到 monetdb shell 并通过 python api.
现在正在尝试导入转储的 CSV 文件,csv 文件的内容如下所示:
44444444|ALI
55555555|JAFFRI
Table 架构定义为:* "Table already have 50 million rows, while csv have only two rows"
CREATE TABLE "voc"."test" (
"id" INTEGER,
"data" VARCHAR(30)
);
- 用户名和数据库名都是"voc"
用于导入文件的命令如下所列。
root@monetdb:~# mclient -u voc -d voc -s "COPY INTO test FROM STDIN" - < test.csv
password:
NULL byte in input
root@monetdb:~# mclient -u voc -d voc -s "COPY INTO test FROM STDIN NULL AS ''" - < test.csv
password:
NULL byte in input
抛出错误 "NULL byte in input" 并且没有向 table 添加任何内容。
对于 Python 我尝试使用以下命令:
import monetdb.sql
connection = monetdb.sql.connect(username="voc", password="voc", hostname="localhost", database="voc")
cursor = connection.cursor()
cursor.execute("COPY INTO test FROM 'test.csv'")
connection.commit()
此代码抛出 Perm 异常:
COPY INTO: insufficient privileges: COPY INTO from file(s) requires database administrator rights, use 'COPY INTO "test" FROM STDIN' instead
现在我没有找到 python 代码与 STDIN 一起使用的任何示例,Monetdb 游标不提供 copy_from,这与 PostgreSQL 不同,您可以单独传递文件。 python有解决办法吗?
OS?
uname -a
Linux monetdb 3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
*** Python 示例在用户 monetdb 上运行良好,但对于终端 "NULL byte in input" 仍然存在。
mclient -u voc -d voc -s "COPY INTO test FROM STDIN" - < test.csv
对我来说很好用。 NULL byte in input
错误表示您尝试加载的文件有问题。
关于另一个问题(从Python调用COPY INTO),错误信息也很清楚。尝试以 monetdb
用户身份连接。
同样有效的是在 COPY INTO 命令之后内联要导入的 CSV 数据。示例 (Python):
cursor.execute("COPY 2 RECORDS INTO test FROM STDIN;\n44444444|AL\n55555555|JAFFRI")
这里的缺点是您需要指定要导入的记录数。
我创建了一个简单的 table (create table dept (dept_id integer, dept_nm varchar(25)) 并尝试使用 Python 并出现错误。所有执行语句都给我相同的错误消息:
connection = monetdb.sql.connect(username="monetdb", password="monetdb", hostname="10.81.102.71", port=2234, database="demo")
cursor = connection.cursor()
cursor.execute("COPY INTO dept FROM 'C:\AWS\did.csv' USING DELIMITERS;")
cursor.execute("COPY INTO dept FROM 'C:\AWS\did.csv' USING DELIMITERS")
cursor.execute("COPY INTO dept FROM STDIN;\n44444444,'AL'\n55555555,'JAFFRI'")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Q1\AppData\Local\Continuum\Anaconda2\lib\site-packages\monetdb\sql\cursors.py", line 175, in execute
block = self.connection.execute(query)
File "C:\Users\Q1\AppData\Local\Continuum\Anaconda2\lib\site-packages\monetdb\sql\connections.py", line 138, in execute
return self.command('s' + query + ';')
File "C:\Users\Q1\AppData\Local\Continuum\Anaconda2\lib\site-packages\monetdb\sql\connections.py", line 143, in command
return self.mapi.cmd(command)
File "C:\Users\Q1\AppData\Local\Continuum\Anaconda2\lib\site-packages\monetdb\mapi.py", line 202, in cmd
raise OperationalError(response[1:])monetdb.exceptions.OperationalError: 25005!current transaction is aborted (please ROLLBACK)