将 BLOB 从 CSV 导入到 SQLite table
Import BLOBs from a CSV to an SQLite table
我应该如何将 UUID 放入 CSV 文件中,以便让 SQLite .import
命令将它们作为 128 位 BLOB 加载到 table 中?
据我所知,从 sqlite3 shell 生成 blob 的唯一方法是使用 zeroblob()
、randomblob()
和 readfile()
sql 函数,CAST
ing 一个值,或作为基数为 16 的 blob 文字 (X'1234ABCD'
)。
如果您的 UUID 已经在 CVS 文件中表示为大端 128 位二进制数,您可能可以在导入后执行类似 UPDATE table SET uuid = CAST(uuid AS BLOB);
的操作。如果它们是像 123e4567-e89b-12d3-a456-426655440000 这样的文本表示,您可以编写一个用户定义的函数来进行转换,并将其与类似的 post-导入UPDATE
.
SQLite
无法从 CSV 导入 BLOB。
解决方法是将CSV转换为SQL语句文件并执行:
sqlite3 database.db < database.sql
如果您从应用程序进行管道传输,100000
行块是每个流程实例的最佳数量。
如果您尝试一次传输许多千兆字节,sqlite3
将崩溃并出现 Out of memory
错误。
我应该如何将 UUID 放入 CSV 文件中,以便让 SQLite .import
命令将它们作为 128 位 BLOB 加载到 table 中?
据我所知,从 sqlite3 shell 生成 blob 的唯一方法是使用 zeroblob()
、randomblob()
和 readfile()
sql 函数,CAST
ing 一个值,或作为基数为 16 的 blob 文字 (X'1234ABCD'
)。
如果您的 UUID 已经在 CVS 文件中表示为大端 128 位二进制数,您可能可以在导入后执行类似 UPDATE table SET uuid = CAST(uuid AS BLOB);
的操作。如果它们是像 123e4567-e89b-12d3-a456-426655440000 这样的文本表示,您可以编写一个用户定义的函数来进行转换,并将其与类似的 post-导入UPDATE
.
SQLite
无法从 CSV 导入 BLOB。
解决方法是将CSV转换为SQL语句文件并执行:
sqlite3 database.db < database.sql
如果您从应用程序进行管道传输,100000
行块是每个流程实例的最佳数量。
如果您尝试一次传输许多千兆字节,sqlite3
将崩溃并出现 Out of memory
错误。