跳转到主要内容

一个用于描述、提取、转换、加载和提供开放数据的平台。

项目描述

Spinta是一个命令行工具和REST JSON API服务,用于在不同的物理数据模型、JSON API和语义数据模型之间发布和映射数据。它支持大量的数据方案和格式。

https://gitlab.com/atviriduomenys/spinta/badges/master/pipeline.svg https://gitlab.com/atviriduomenys/spinta/badges/master/coverage.svg
Physical data        Different       Real time         REST JSON
   sources            formats      transformation         API

                      +-----+
                 +--> | SQL | --------->|
   +------+      |    +-----+           |
   | file | ---->|                      |
   +------+      |    +-----+           |
                 +--> | CSV | --------->|
  +--------+     |    +-----+           |         +---------------+
  | DB API | --->|                      | ------->| REST JSON API |
  +--------+     |    +------+          |         +---------------+
                 |    | JSON | -------->|
 +----------+    |    +------+          |
 | REST API | -->|                      |
 +----------+    |    +-----+           |
                 +--> | XML | --------->|
                      +-----+

目的

  • 描述你的数据:你可以从许多不同的数据源自动生成数据结构描述表(Manifest)。

  • 提取你的数据:一旦你在Manifest表中有了数据结构,你就可以从多个外部数据源提取数据。提取的数据将通过在Manifest表中定义的规则进行验证和转换。最后,数据可以存储到内部数据库中,以便快速灵活地访问数据。

  • 转换你的数据:数据转换在读取数据时实时应用。这限制了转换方面的一些限制,但允许数据实时流。

  • 发布您的数据:一旦您将数据加载到内部数据库,您就可以使用API发布数据。API会自动根据Manifest表生成,并提供多种不同格式的提取数据。例如,如果原始数据源是CSV文件,现在您有一个灵活的API,可以处理JSON、RDF、SQL、CSV和其他格式。

功能

  • 简单的15列表格格式,用于描述数据结构(您可以使用任何电子表格软件来管理您数据的元数据)

  • 具有可插拔后端(PostgreSQL或Mongo)的内部数据存储

  • 内置异步API服务器,基于Starlette构建,用于数据发布

  • 简单的基于Web的数据浏览器

  • 方便的命令行界面

  • 通过内置访问管理,通过OAuth协议提供公开或受限的API访问

  • 简单的领域特定语言(DSL),用于查询、转换和验证数据

  • 适用于任何大小数据的低内存消耗

  • 支持许多不同的数据源

  • 即使是从动态API中也能进行高级数据提取

  • DCATFrictionless Data Specifications兼容

示例

如果您有一个SQLite数据库

$ sqlite3 sqlite.db <<EOF
CREATE TABLE COUNTRY (
    NAME TEXT
);
EOF

您可以使用单个命令获得一个受限的API和一个简单的基于Web的数据浏览器

$ spinta run -r sql sqlite:///sqlite.db

然后您可以生成如下所示的元数据表(manifest

$ spinta inspect -r sql sqlite:///sqlite.db
d | r | b | m | property | type   | ref | source              | prepare | level | access | uri | title | description
dataset                  |        |     |                     |         |       |        |     |       |
  | sql                  | sql    |     | sqlite:///sqlite.db |         |       |        |     |       |
                         |        |     |                     |         |       |        |     |       |
  |   |   | Country      |        |     | COUNTRY             |         |       |        |     |       |
  |   |   |   | name     | string |     | NAME                |         | 3     | open   |     |       |

生成的数据结构表可以保存到CSV文件中

$ spinta inspect -r sql sqlite:///sqlite.db -o manifest.csv

元数据中缺失的部分可以使用任何电子表格软件进行填充。

一旦您完成元数据的编辑,您可以通过基于Web的数据浏览器或API对其进行测试

$ spinta run --mode external manifest.csv

一旦您对元数据满意,您可以生成一个新的元数据表进行发布,删除原始数据源的任何痕迹

$ spinta copy --no-source --access open manifest.csv manifest-public.csv

现在您有了用于发布的元数据,但关于原始数据源的所有信息都已消失。为了发布数据,您需要将外部数据复制到内部数据存储。为此,首先您需要初始化内部数据存储

$ spinta config add backend my_backend postgresql postgresql://localhost/db
$ spinta config add manifest my_manifest tabular manifest-public.csv
$ spinta migrate

一旦内部数据库初始化完成,您可以将外部数据推送到它

$ spinta push --access open manifest.csv

现在您可以使用功能齐全的API和基于Web的数据浏览器发布数据

$ spinta run

您可以这样访问您的数据

$ http :8000/dataset/sql/Country
HTTP/1.1 200 OK
content-type: application/json

{
    "_data": [
        {
            "_type": "dataset/sql/Country",
            "_id": "abdd1245-bbf9-4085-9366-f11c0f737c1d",
            "_rev": "16dabe62-61e9-4549-a6bd-07cecfbc3508",
            "_txn": "792a5029-63c9-4c07-995c-cbc063aaac2c",
            "name": "Vilnius"
        }
    ]
}

$ http :8000/dataset/sql/Country/abdd1245-bbf9-4085-9366-f11c0f737c1d
HTTP/1.1 200 OK
content-type: application/json

{
    "_type": "dataset/sql/Country",
    "_id": "abdd1245-bbf9-4085-9366-f11c0f737c1d",
    "_rev": "16dabe62-61e9-4549-a6bd-07cecfbc3508",
    "_txn": "792a5029-63c9-4c07-995c-cbc063aaac2c",
    "name": "Vilnius"
}

$ http :8000/dataset/sql/Country/abdd1245-bbf9-4085-9366-f11c0f737c1d?select(name)
HTTP/1.1 200 OK
content-type: application/json

{
    "name": "Vilnius"
}

项目详情


发布历史 发布通知 | RSS订阅

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

spinta-0.1.75.tar.gz (380.9 kB 查看哈希值)

上传时间

构建分发

spinta-0.1.75-py3-none-any.whl (543.7 kB 查看哈希值)

上传时间 Python 3

支持者