如果我有一些样本数据,如何将其放入SQLite(最好是完全自动化)?
{"uri":"/","user_agent":"example1"}
{"uri":"/foobar","user_agent":"example1"}
{"uri":"/","user_agent":"example2"}
{"uri":"/foobar","user_agent":"example3"}
答案 0 :(得分:2)
我发现最简单的方法是使用jq和CSV作为中间格式。
首先将数据写入文件。 我将在这里假设 data.json 。
然后使用jq
构建标题:
% head -1 data.json | jq -r 'keys | @csv'
"uri","user_agent"
head -1
是因为我们只需要一行。
jq
' s -r
使输出为纯字符串,而不是包装CSV的JSON-String。
然后,我们调用内部函数keys
以将输入的键作为数组获取。
我们发送给@csv
格式化程序,该格式化程序向我们输出一个字符串,其中包含引号为CSV格式的标题。
然后我们需要构建数据。
% jq -r '[.[]] | @csv' < data.json
"/","example1"
"/foobar","example1"
"/","example2"
"/foobar","example3"
我们现在使用.[]
获取整个输入并解构关联数组(map),然后将其放回到简单数组[…]
中。
这基本上将我们的字典转换为键数组。
发送到@csv
格式化程序后,我们再次获得一些CSV。
将所有内容放在一起,我们得到一个单行内容:
% (head -1 data.json | jq -r 'keys | @csv' && jq -r '[.[]] | @csv' < data.json) > data.csv
如果您需要动态转换数据,即没有文件,请尝试:
% cat data.json | (read -r first && jq -r '(keys | @csv),( [.[]] | @csv)' <<<"${first}" && jq -r '[.[]] | @csv')
打开SQLite数据库:
sqlite3 somedb.sqlite
现在在交互式shell中执行以下操作(假设您将CSV写入 data.csv 并希望将其放在名为my_table
的表中):
.mode csv
.import data.csv my_table
现在关闭shell并再次打开它以获得干净的环境。
您现在可以从数据库中轻松SELECT
并执行您想要的任何操作。
在那里录制asciinema:
答案 1 :(得分:2)
没有中间CSV或第三方工具的一种方法是将SQLite的JSON1
extension与sqlite3
CLI工具中提供的readfile
extension结合使用。
如果输入文件是格式正确的JSON文件,例如以数组形式给出的示例:
[
{"uri":"/","user_agent":"example1"},
{"uri":"/foobar","user_agent":"example1"},
{"uri":"/","user_agent":"example2"},
{"uri":"/foobar","user_agent":"example3"}
]
然后可以将其读取到相应的my_table
表中,如下所示。使用sqlite3 CLI打开SQLite数据库文件my_db.db
:
sqlite3 my_db.db
然后使用以下方法创建my_table
:
CREATE TABLE my_table(uri TEXT, user_agent TEXT);
最后,可以使用CLI命令将my_data.json
中的JSON数据插入表中:
INSERT INTO my_table SELECT
json_extract(value, '$.uri'),
json_extract(value, '$.user_agent')
FROM json_each(readfile('my_data.json'));
除了总体上是一个“更直接”的解决方案之外,它还具有比CSV更一致地处理JSON NULL值的优点,否则它将作为空字符串导入。
如果初始JSON文件是用换行符分隔的JSON元素,则可以首先使用jq
使用以下命令进行转换:
jq -s <my_data_raw.json >my_data.json
很可能有一种方法可以使用JSON1在SQLite中直接执行此操作,但是鉴于我已经在导入到SQLite之前已经使用jq
对数据进行了按摩,因此我没有这么做。 / em>
答案 2 :(得分:0)
sqlitebiter似乎提供了一个python解决方案:
用于将CSV / Excel / HTML / JSON / LTSV / Markdown / SQLite / TSV / Google-Sheets转换为SQLite数据库文件的CLI工具。 http://sqlitebiter.rtfd.io/
文档: http://sqlitebiter.readthedocs.io/en/latest/
项目: https://github.com/thombashi/sqlitebiter