我正在尝试使用odo将CSV导入MySQL,但遇到数据形状错误。
我的理解是数据形状采用以下格式:
var * {
column: type
...
}
其中 var 表示可变数量的行。 我收到以下错误:
AssertionError: datashape must be Record type, got 0 * {
tod: ?string,
interval: ?string,
iops: float64,
mb_per_sec: float64
}
我不确定 0 行数来自哪里。 我尝试使用 dshape()
显式设置数据形状,但仍然收到相同的错误。
下面是重现错误的代码的精简版本:
from odo import odo
odo('test.csv', mysql_database_uri)
我正在使用Conda运行Ubuntu 16.04和Python 3.6.1。
感谢您的任何输入。
我遇到了这个错误,需要指定表
# error
odo('data.csv', 'postgresql://usr:pwd@ip/db')
# works
odo('data.csv', 'postgresql://usr:pwd@ip/db::table')
尝试替换
odo('test.csv', mysql_database_uri)
跟
odo(pandas.read_csv('test.csv') , mysql_database_uri)
Odo似乎有问题并停产。作为替代方案,您可以使用d6tstack,它具有快速的SQL功能,因为它使用本机数据库导入命令。它支持Postgres,MYSQL和MS SQL,
cfg_uri_mysql = 'mysql+mysqlconnector://testusr:testpwd@localhost/testdb'
d6tstack.combine_csv.CombinerCSV(glob.glob('*.csv'),
apply_after_read=apply_fun).to_mysql_combine(uri_psql, 'table')
对于在写入数据库之前导入多个具有数据模式更改和/或使用 pandas 预处理的 CSV 也特别有用,请参阅下面的示例笔记本