【问题标题】:How to make Beam queries?如何进行 Beam 查询?
【发布时间】:2020-07-07 23:42:57
【问题描述】:

我刚开始使用 Haskell,最近使用 Beam。我以某种方式浏览了文档,但无法很好地掌握它。

如何进行简单的查询?

我可以在文档中看到

filter_ 之类的函数将 lambda 函数作为输入参数。

来自文档

filter_ (\s -> addressCity (customerAddress s) ==. val_ (Just "Berlin")) $
all_ (customer chinookDb)

s 是什么?梁库为我们提供的 lambda 函数提供了哪些值(和类型)? addressCity (customerAddress s) 是一栏吗?我知道customer 是表,chinookDb 是数据库。

我对求和查询更感兴趣。相当于

SELECT SUM(colname) FROM TABLE;

但是,文档仅给出了一个稍微复杂的查询作为示例。

    aggregate_ (\(genre, track) ->
              ( group_ genre
              , as_ @Int $ countOver_ distinctInGroup_ (trackUnitPrice track)
              , fromMaybe_ 0 (sumOver_ allInGroupExplicitly_ (fromMaybe_ 0 (trackMilliseconds track))) `div_` 1000)) $ do
  g <- all_ (genre chinookDb)
  t <- genreTracks g
  pure (g, t)

我可以说sum_count_ 相似,但又必须向它提供什么 lambda 函数?

【问题讨论】:

    标签: haskell haskell-beam


    【解决方案1】:

    我想通了。

    如果您对 可以 将什么 lambda 函数作为输入提出疑问,那就很清楚了。

    所以这个表达式:

    aggregate_ (\x -&gt; sum_ (hello x))其实是aggregate_ (\col -&gt; sum_ (colT col))

    其中colT 是您在定义梁表时定义的列。 lambda 函数中 colT 的存在足以让 Beam 从表中获取相应的列并将该值传递给函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 2022-01-25
      相关资源
      最近更新 更多