我将 postgres 数据库中的几个表连接在一起,并将右连接表中的值作为左连接表中的聚合 JSON 结构返回。但是我发现连接的表越多,该查询就会变得越复杂。例如:
select row_to_json(output)
from (
select image_type.name,
(
select json_agg(instances)
from (
select image_instance.name, (
select json_agg(versions)
from (
select image_version.name
from image_version
where image_version.image_instance_id = image_version.image_instance_id
) versions
) AS versions
from image_instance
where image_instance.image_type_id = image_type.image_type_id
) instances
) AS images
from image_type
) output;
Run Code Online (Sandbox Code Playgroud)
我在这里加入了三个表,但是我想再添加几个表,但是代码很快就会变得笨拙且难以维护。有没有一种简单的方法来生成这些类型的聚合连接?
我一直在研究'真实世界Haskell',我一直在努力研究如何使用Maybe.我从第3章开始编写了这种数据类型和相应的函数.本书建议尝试将其转换为使用Maybe并摆脱Nil类型.我一直在玩这个,但我无法弄清楚如何做到这一点.我尝试过在不同的地方添加,但我真的只是猜测而不是知道如何去做.
data List a = List a (List a)
| Nil
deriving (Show)
toList :: List a -> [a]
toList (List a Nil) = a:[]
toList (List a as) = a:(toList as)
Run Code Online (Sandbox Code Playgroud) 我是新手使用compojure,但到目前为止一直喜欢使用它.我目前在我的一个API端点中遇到一个问题,即从数据库生成一个大的CSV文件,然后将其作为响应主体传递.
我似乎遇到的问题是整个CSV文件被保存在内存中,然后导致API中的内存不足错误.处理和生成这个的最佳方法是什么,理想情况下是一个gzip压缩文件?是否可以流式传输响应,以便一次返回几千行?当我为相同的数据返回JSON响应主体时,返回它没有问题.
这是我用来返回的当前代码:
(defn complete
"Returns metrics for each completed benchmark instance"
[db-client response-format]
(let [benchmarks (completed-benchmark-metrics {} db-client)]
(case response-format
:json (json-grouped-output field-mappings benchmarks)
:csv (csv-output benchmarks))))
(defn csv-output [data-seq]
(let [header (map name (keys (first data-seq)))
out (java.io.StringWriter.)
write #(csv/write-csv out (list %))]
(write header)
(dorun (map (comp write vals) data-seq))
(.toString out)))
Run Code Online (Sandbox Code Playgroud)
这data-seq是从数据库返回的结果,我认为这是一个懒惰的序列.我正在使用yesql来执行数据库调用.
以下是此API端点的compojure资源:
(defresource results-complete [db]
:available-media-types ["application/json" "text/csv"]
:allowed-methods [:get]
:handle-ok (fn [request]
(let [response-format (keyword (get-in request [:request :params :format] :json))
disposition …Run Code Online (Sandbox Code Playgroud) 我正在使用 Rmarkdown、bookdown 和 pandoc 生成参考部分。我有一个包含 6 个条目的参考部分。其中一个条目没有作者列表,而是显示为:
———. 2004. “Multimodel Inference.” Sociological Methods & Research 33 (2). SAGE Publications: 261–304. doi:10.1177/0049124104268644.
Run Code Online (Sandbox Code Playgroud)
这个 bibtex 条目如下所示:
@article{burnham2004,
author = {Burnham, Kenneth P. and Anderson, David R.},
day = {01},
doi = {10.1177/0049124104268644},
issn = {0049-1241},
journal = {Sociological Methods \& Research},
keywords = {mdb-article-2017-06},
month = nov,
number = {2},
pages = {261--304},
posted-at = {2017-06-05 22:18:23},
priority = {2},
publisher = {SAGE Publications},
title = {Multimodel Inference},
url = {http://dx.doi.org/10.1177/0049124104268644},
volume …Run Code Online (Sandbox Code Playgroud) 如果我有两个Docker容器(A和B)在81和82上发布它们的端口运行,我怎样才能将这些容器链接到在端口80上运行的第三个容器(C),它将不同的URL路径映射到这些不同的容器?
bibliography ×1
bookdown ×1
clojure ×1
compojure ×1
csv ×1
docker ×1
haskell ×1
http ×1
json ×1
large-files ×1
maybe ×1
pandoc ×1
postgresql ×1
r-markdown ×1