使用 Python Pandas to_sql() 将错误行批量插入 crateDB 时如何引发异常
How to raise an exception when bulk inserting faulty rows into crateDB using Python Pandas to_sql()
我正在使用
将数据批量插入 crateDB
pandas.to_sql(tableId, 'crate://xxxxxxx:4200', if_exists='append', index=False, chunksize=20000)
数据包含一些错误行,其中 'numeric' 类型的一列包含 'object' / 'string'.
类型的值
这会导致插入时出现类型转换错误。
当我将 to_sql() 的 chunksize 参数设置为 1 时,引发异常,我可以捕获问题。
当 chunksize > 0 时,to_sql()
只是继续,我无法确保数据已正确插入。
我错过了什么,解决这个问题的好方法是什么?
对于批量插入,您需要检查查询结果以进行错误处理。它包括一个 rowcounts
的数组。 -2
表示发生错误。
对于特定错误,可能包括类型转换错误,所有行都将被拒绝(即所有行数 return -2),在这种情况下,您将需要回退到单个插入。
有关更多详细信息,请参阅 https://crate.io/docs/crate/reference/en/4.6/interfaces/http.html#bulk-errors。
最有可能的问题是 pandas 没有 return to_sql()
上的任何内容也请参阅 https://github.com/pandas-dev/pandas/issues/23998 and https://github.com/pandas-dev/pandas/issues/42645 。由于 CrateDB 中的 bulk_insert 并没有完全失败,只是跳过了错误的行,因此没有引发异常,但只有一个每行有一个值的数组被 returned。然而 return 从未在 pandas 中处理过:/
可以更改 CrateDB 的 SQL alchemy 实现,但这会 return 破坏任何实际使用结果数组的实现。
我正在使用
将数据批量插入 crateDBpandas.to_sql(tableId, 'crate://xxxxxxx:4200', if_exists='append', index=False, chunksize=20000)
数据包含一些错误行,其中 'numeric' 类型的一列包含 'object' / 'string'.
类型的值这会导致插入时出现类型转换错误。
当我将 to_sql() 的 chunksize 参数设置为 1 时,引发异常,我可以捕获问题。
当 chunksize > 0 时,to_sql()
只是继续,我无法确保数据已正确插入。
我错过了什么,解决这个问题的好方法是什么?
对于批量插入,您需要检查查询结果以进行错误处理。它包括一个 rowcounts
的数组。 -2
表示发生错误。
对于特定错误,可能包括类型转换错误,所有行都将被拒绝(即所有行数 return -2),在这种情况下,您将需要回退到单个插入。
有关更多详细信息,请参阅 https://crate.io/docs/crate/reference/en/4.6/interfaces/http.html#bulk-errors。
最有可能的问题是 pandas 没有 return to_sql()
上的任何内容也请参阅 https://github.com/pandas-dev/pandas/issues/23998 and https://github.com/pandas-dev/pandas/issues/42645 。由于 CrateDB 中的 bulk_insert 并没有完全失败,只是跳过了错误的行,因此没有引发异常,但只有一个每行有一个值的数组被 returned。然而 return 从未在 pandas 中处理过:/
可以更改 CrateDB 的 SQL alchemy 实现,但这会 return 破坏任何实际使用结果数组的实现。