首页 > 解决方案 > 有没有办法不用 R 中的 ckanr 下载整个 CKAN 数据包?

问题描述

我不熟悉 CKAN,我正在努力使用ckanrR Cran 存储库中的包从加载到 R 中的 CKAN 数据 API 获取数据。在服务器方面,下载限制为 100,000 个条目,因此尝试下载全部 420,000 个条目不会返回超过前 100,000 个条目。该数据集提供了丹麦电力消耗的二氧化碳排放量的更新历史记录,以 5 分钟的时间间隔测量,以 g/kWh 为单位。

使用下面的代码片段,我可以下载 100,000 个第一个条目。我对特定日期范围内大约 20,000 个值的间隔感兴趣。可以通过网络界面手动下载数据,但由于我必须定期更新数据并每次手动下载多个 CSV 文件,因此更喜欢数据 API 下载。

任何帮助将非常感激。

网络界面: https ://www.energidataservice.dk/dataset/co2emis/resource_extract/b5a8e0bc-44af-49d7-bb57-8f968f96932d

可以通过 CKAN 操作 API 的以下操作访问数据 API。

查询: https ://api.energidataservice.dk/datastore_search

查询(通过 SQL):https ://api.energidataservice.dk/datastore_search_sqlhttps://api.energidataservice.dk/datastore_search

require(ckanr)
start_date <- min(opladning$start)
end_date <- max(opladning$slut)

ckanr_setup(url = "https://energidataservice.dk")
pkco2emis <- package_show("6e05f3b6-fcd7-4b40-8100-4416b9803881", as 
= "table")


temp <- tempfile(fileext=".csv")
download.file(pkco2emis$resources$url, temp)
co2emission <- read.csv(temp)

标签: rckan

解决方案


通过包中的ds_search_sql函数将 URL SQL 查询解析到 REST API ckanr,我能够从 API 中提取数据。

#end_date and start_date represent interval.
library(ckanr)
library(lubridate)

start_date <- as.POSIXct("2019-01-01 00:00:00")
end_date <- as.POSIXct("2019-03-01 00:00:00")



url_base <- 'https://api.energidataservice.dk/datastore_search_sql?sql='
query_co2 <- 'SELECT "Minutes5DK", "CO2Emission" from "b5a8e0bc-44af-49d7-bb57-8f968f96932d" WHERE "Minutes5UTC" > timestamp\''
query_date_start <- format(with_tz(start_date, "UTC"), "%Y-%m-%d %H:%S")
query_date_end <- format(with_tz(end_date, "UTC"), "%Y-%m-%d %H:%S")
query_co2 <- paste0(query_co2,query_date_start,
                '\' AND \"Minutes5UTC\" < timestamp\'',
                query_date_end,
                '\' AND \"PriceArea\" = \'DK1\'')




co2emission <- ds_search_sql(query_co2, 
                         url = url_base, 
                         as = "table")$records

推荐阅读