用于处理Amsterdam Schema的工具。
项目描述
amsterdam-schema-tools
一组用于处理Amsterdam Schema的库和工具。
使用以下命令安装此包:pip install amsterdam-schema-tools
。这会安装库和一个名为schema
的命令行工具,它具有各种子命令。可以通过schema --help
获取列表。
与PostgreSQL数据库通信的子命令需要DATABASE_URL
环境变量或带有DSN的命令行选项--db-url
。
许多子命令需要知道如何找到模式文件。大多数会在由SCHEMA_URL
环境变量或--schema-url
命令行选项指定的模式目录中查找。例如:
schema create tables --schema-url=myschemas mydataset
将尝试从myschemas/mydataset/dataset.json
加载mydataset
的模式。
从现有数据库表生成Amsterdam模式
--prefix参数控制是否在模式中删除表前缀,因为这是Django模型所必需的。
例如,我们可以生成一个BAG模式。将DATABASE_URL
指向bag_v11
数据库,然后运行
schema show tablenames | sort | awk '/^bag_/{print}' | xargs schema introspect db bag --prefix bag_ | jq
jq格式化得很好,可以直接重定向到模式存储库的正确目录。
以关系表的形式表达阿姆斯特丹模式信息
阿姆斯特丹模式以jsonschema的形式表达。然而,为了使具有更关系性思维或工具集的人更容易理解,可以将阿姆斯特丹模式表达为一组关系表。这些表是meta_dataset、meta_table和meta_field。
可以将jsonschema转换为关系表结构,反之亦然。
此命令将一个数据集从现有的jsonschema格式的数据集中转换
schema import schema <id of dataset>
要将关系表转换回jsonschema
schema show schema <id of dataset>
从现有的GeoJSON文件生成阿姆斯特丹模式
以下命令可用于检查和导入GeoJSON文件
schema introspect geojson <dataset-id> *.geojson > schema.json
edit schema.json # fine-tune the table names
schema import geojson schema.json <table1> file1.geojson
schema import geojson schema.json <table2> file2.geojson
导入GOB事件
schematools库有一个模块可以读取由阿姆斯特丹模式定义的数据库表中的GOB事件。此模块可以用于从Kafka流中读取GOB事件。还可以使用以下方法从带有行分隔事件的批处理文件中读取GOB事件
schema import events <path-to-dataset> <path-to-file-with-events>
导出数据集
数据集可以导出为不同的文件格式。目前支持geopackage、csv和jsonlines。导出数据集表的命令是
schema export [geopackage|csv|jsonlines] <id of dataset>
此命令具有多个可用的命令行选项。有关这些标志的文档可以使用--help
选项显示。
将Schema Tools用作预提交钩子
项目包含一个pre-commit
钩子,可以验证项目中的模式文件,例如amsterdam-schema
要配置它,请将项目的.pre-commit-config.yaml
扩展如下
- repo: https://github.com/Amsterdam/schema-tools
rev: v3.5.0
hooks:
- id: validate-schema
args: ['https://schemas.data.amsterdam.nl/schema@v1.2.0#']
exclude: |
(?x)^(
schema.+| # exclude meta schemas
datasets/index.json
)$
args
是一个包含阿姆斯特丹元模式URL的单元素列表。
validate-schema
将仅处理json
文件。然而,并非所有json
文件都是阿姆斯特丹模式文件。要排除文件或目录,请使用模式使用exclude
。
pre-commit
依赖于其钩子的正确标记版本。因此,我们不仅应该在更新此包时增加版本号,而且还应该提交一个带有版本号的标签;见下文。
进行发布
(这是为schema-tools开发者准备的。)
我们使用GitHub pull请求。如果您的PR应该生成schema-tools的新版本,请确保其中一个提交适当地增加了setup.cfg
中的版本号。然后,
- 在审查后合并提交到GitHub;
- 从GitHub拉取代码并将其合并到master分支中,
git checkout master && git fetch origin && git merge --ff-only origin/master
; - 使用
git tag -a vX.Y.Z -m "Bump to vX.Y.Z"
标记版本X.Y.Z; - 将标签推送到GitHub,使用
git push origin --tags
; - 发布到PyPI:
make upload
(需要PyPI密钥)。
模拟数据
schematools库包含两个Django管理命令来生成模拟数据。第一个是create_mock_data
,它为在配置的模式位置SCHEMA_URL
(其中SCHEMA_URL
可以配置为指向本地文件系统的路径)中找到的所有数据集生成模拟数据。
create_mock_data
命令处理所有数据集。然而,可以通过添加位置参数来限制此操作。这些位置参数可以是数据集ID或本地文件系统中dataset.json
位置路径。
此外,该命令还有一些选项,例如更改生成的默认记录数量(--size
)或使用--exclude
反转位置参数的含义。
为了避免在后续运行中出现重复的主键,可以使用--start-at
选项从偏移量开始自动编号主键。
例如,为bag
和gebieden
数据集生成5条记录,从主键自动编号的50开始。
django create_mock_data bag gebieden --size 5 --start-at 50
为除了fietspaaltjes
数据集之外的所有数据集生成记录。
django create_mock_data fietspaaltjes --exclude # or -x
通过从本地文件系统加载模式生成bbga
数据集的记录。
django create_mock_data <path-to-bbga-schema>/datasets.json
在create_mock_data
记录生成过程中,不会添加关系,因此外键字段将填充NULL值。
还有一个名为relate_mock_data
的第二个管理命令,可以用来添加关系。此命令支持与create_mock_data
相同的方式为数据集提供位置参数。此外,该命令还提供了--exclude
选项,用于反转位置数据集参数的含义。
例如,为所有数据集添加关系
django relate_mock_data
仅为bag
和gebieden
添加关系
django relate_mock_data bag gebieden
为除了meetbouten
之外的所有数据集添加关系
django relate_mock_data meetbouten --exclude # or -x
注意。当仅模拟数据集的子集时,如果涉及关系的数据集缺失,则命令可能会失败,因此请确保包括所有相关数据集。
为了方便,还增加了一个名为truncate_tables
的管理命令,用于截断所有表。
项目详情
下载文件
下载适用于您的平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
构建分发
amsterdam_schema_tools-6.1.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 69d71adc49540ddc59172b7e5093dd1bae654a80481652f7cffa3f64badbcd9b |
|
MD5 | 824e955e24203d5dd5d467c4091a739f |
|
BLAKE2b-256 | 6c89e04ab86c4c862fc630442e78bc67d91e53958754a8c1495f2018478e9746 |
amsterdam_schema_tools-6.1.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dc503ae694a9b35b86709ee5a546145c5fa323abbae950e3f7584b92131473ff |
|
MD5 | 53f09d8a8dc512e7127ebe22386ac503 |
|
BLAKE2b-256 | 9f1935a8660c9d67a2446ce40d9d30ad023c3ac9a89681f6ba2fe6d05c2d59ff |