首页 > 解决方案 > 如何使用 rasdaman 加载 json 文件

问题描述

我正在研究 Array 数据库管理系统,特别是Rasdaman,我从表面上理解了体系结构以及系统如何使用集合和多维数组而不是表,因为它在关系 dbms 中很常见,我试图保存我自己的数据类型来检查如果这种类型的数据库可以为我的特定问题(特定格式的地理空间数据:DGGS)提供更好的性能,那么我已经根据文档所示的结构创建了自己的基本类型,创建了我的数组类型,设置类型,最后是我的测试集合,我试图用以下想法将数据插入到这个集合中:

query_executor.execute_update_from_file("insert into test_json_dict values decode($1, 'json', '{\"formatParameters\": {\"domain\": \"[0:1000]\",\"basetype\": struct { char k, long v } } })'", "...path.../rasdapy-demo/dggs_sample.json")

我正在使用库rasdapy从 python 中工作,而不是仅使用 rasql(无论如何我都使用它来验证小东西),但我一直在与几乎没有信息的错误消息作斗争:

Internal error: RasnetClientComm::executeQuery(): illegal status value 5

我的源文件中有这种类型的数据:

{
  "N1": 6
}

一个带有键和值的简单字典,我想保存这两个东西,我还尝试了一个更大的字典,上面有多个键和值,但是如果我理解正确,rasdaman 解码函数需要一个基本类型定义我试图改变我的数据源格式为简单的 dict。很明显,我没有为解码做适当的定义,或者我的源文件格式错误,但我无法在网上找到任何示例,关于如何进行的任何想法?也许我什至从错误的角度做这件事,也许我应该尝试使用 OGC 网络覆盖服务 (WCS) 标准?我还不明白这一点,所以我一直在避免它,无论如何,任何建议或方向都非常感谢。提前致谢。

编辑:

我一直在尝试使用以下格式加载 CSV 数据:

1 930
2 461
..

和以下查询

query_executor.execute_update_from_file("insert into test_json_dict values decode($1, 'csv', '{\"formatParameters\": {\"domain\": \"[1:255]\",\"basetype\": struct { char key, long value } } })'", "...path.../rasdapy-demo/dggs_sample_4.csv")

但仍然没有结果,即使它看起来与查找 CSV/JSON 示例中的文档示例非常相似,但仍然没有结果。可能是什么问题?

标签: pythongeospatialraster

解决方案


似乎我的问题是尝试使用 rasdapy 库,这个库工作正常,但是当使用 csv 和 json 等数据格式时,最好使用 rasql 命令行选项,它在文档中指出:

filePaths - 要解码的输入文件的绝对路径数组,例如 ["/path/to/rgb.tif"]。如果数据与 rasdaman 服务器位于同一台机器上,这将提高摄取性能,因为绕过网络传输并直接从磁盘读取数据。仅支持 GDAL、NetCDF 和 GRIB 数据格式。

它还说:

作为第一个参数,必须指定要解码的数据。从技术上讲,这些数据必须是一维字符数组的形式。通常它被指定为带有 $1 的查询输入参数,而二进制数据则通过 rasql 命令行客户端工具的 --file 选项附加,或者通过客户端 API 中的相应方法附加。

如果 rasdapy 考虑到这一点,将会很有趣。无论如何,使用 rasql 会产生更好的响应错误,所以我建议任何有类似问题的人使用。

一个示例命令可以是:

rasql -q 'insert into test_basic values decode($1, "csv", "{ \"formatParameters\": {\"domain\": \"[0:1,0:2]\",\"basetype\": \"long\" } }")' --out string --file "/home/rasdaman/Documents/TFM/include/DGGS-Comparison/rasdapy-demo/dggs_sample_6.csv" --user rasadmin --passwd rasadmin

使用这些数据:

1,2,3,2,1,3

之后,您只需根据需要开始使其变得越来越复杂。


推荐阅读