通常我们会定期使用 SQL Job 将事务数据聚合到一张表中。现在客户需要实时数据,所以 1 小时或 1 小时太长了。团队建议创建一个视图,其中包含从事务表本身选择数据的逻辑,而不是在几分钟内运行作业。
但我的困惑是选择查询和视图之间任何与性能相关的差异。以周期性方式将数据放入聚合表中并从该聚合中进行选择很容易,因为 1. 它不会影响主表
直接事务表中的直接选择语句会影响频繁发生的插入操作。如果我创建一个视图,我认为这个概念与 select 语句相同。现在我们也从主表中进行选择。还是我的理解有误?
请提出最佳方法以及原因
我有一个大约 3000 列 x 3000 行的大矩阵。我想聚合(计算平均值)按每行的列名称分组。每列的命名与此方法类似......(并且按随机顺序)
Tree Tree House House Tree Car Car House
Run Code Online (Sandbox Code Playgroud)
我需要数据结果(每行平均值的聚合)具有以下列:
Tree House Car
Run Code Online (Sandbox Code Playgroud)
我正在尝试将带有复杂查询的子查询从 Oracle 转换为 Postgres。下面是子查询及其给出的错误。我知道 Postgres 中也有“WITHIN GROUP”。我错过了什么?我什Listagg至改为String_agg但得到同样的错误。
Select a, Listagg(b, ', ') WITHIN GROUP (ORDER BY b) "a"
from table;
Run Code Online (Sandbox Code Playgroud)
错误:
错误:“WITHIN”第 65 行或附近的语法错误:...a, Listagg(b, ', ') WITHIN GRO...
********** 错误 **********
错误:“WITHIN”SQL 状态处或附近的语法错误:42601 字符:5290
有没有办法在算术运算中使用聚合结果?
我想取两个聚合列 ( SUM(..), COUNT(..)) 并将它们一起操作,例如:
-- doesn't work
SELECT
SUM(x) AS x,
COUNT(y) AS y,
(x / y) AS x_per_y -- Problem HERE
FROM
my_tab
GROUP BY groupable_col;
Run Code Online (Sandbox Code Playgroud)
这不起作用,但我发现这样做:
SELECT
SUM(x) AS x,
COUNT(y) AS y,
SUM(x) / COUNT(y) AS x_per_y -- notice the repeated aggregate
FROM
my_tab
GROUP BY groupable_col;
Run Code Online (Sandbox Code Playgroud)
但是如果我需要对聚合进行操作的许多列,它很快就会变得非常重复,而且我不确定如何判断 MySQL 是否可以优化,以便我不会多次计算聚合。
我已经搜索了一段时间,并询问了一些专业人士,我能想到的最佳选择是嵌套选择,~~我的数据库不支持。~~
编辑:它确实支持他们,我一直在做错事,并过早地排除了嵌套选择
此外,MySQL 文档似乎支持它,但我无法让这样的东西工作(链接最底部的示例)
https://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html
在过去的几天里,我读了很多书,但找不到适合我的解决方案。还看到了一些string正在使用该类型的东西,这在我使用的 ES 版本中已被弃用。
我在 Elasticsearch 上:5.6.4
我已经索引了一些文档,并尝试了映射并尝试使用analyzers( path_hierarchy tokenizer),查看一下,Ingest Node但似乎没有什么适合我。它与 category_tags 字段有关(请参见底部的示例)。我确实有可能按照我的喜好重组它,如果有必要,我会生成这些数据。
我想要一个典型的电子商务导航,所以我认为这应该通过 category_tags 上的聚合来实现?我创建了一个数组来显示一个文档可以有多个类别,其中每个层次结构可以是任意深的。我不认为它会比 4 或 5 级更深,但可能会发生。
我的动态模板如下所示:
...
"analyzer": {
"my_path_hierarchy_analyzer": {
"type": "custom",
"tokenizer": "my_path_hierarchy_tokenizer"
},
"my_pipe_analyzer": {
"type": "custom",
"tokenizer": "my_pipe_tokenizer"
}
},
"tokenizer": {
"my_path_hierarchy_tokenizer": {
"type": "path_hierarchy",
"delimiter": "|"
},
"my_pipe_tokenizer": {
"type": "pattern",
"pattern": "|"
}
}
}
},
"mappings": {
"item": {
"dynamic_templates": [
{
"category_tags_analyzed": {
"match": "category_tags",
"mapping": {
"type": "text", …Run Code Online (Sandbox Code Playgroud) 我最近开始了我的第一次尝试,使用领域驱动设计原则结合事件溯源和 CQRS 来开发票务 Web 应用程序。
由于这是我第一次尝试脱离传统的 CRUD 方法,进入 DDD 世界,我确信我有很多东西设计错误,因为 DDD 需要付出很多努力来提出正确的域分离、有界上下文等。
在我的设计中,我有接受命令的命令处理程序,启动一个工作(一个工作单元),它们从聚合存储库(通过重放事件从事件存储加载聚合)加载所需的聚合,并操纵聚合通过每个聚合的公开操作,然后关闭作业。
聚合公开了实际发出事件的动作。例如,company.Create(firmName, address, taxid, ...) 发出一个CompanyCreated事件,并将其应用于自身。当 Job 即将完成时,来自该 Job 上下文中加载的所有聚合的所有事件都被事件存储收集并持久化。
现在,我遇到了一种情况,我确信这种情况很常见,在那里我有聚合之间的关系。例如 a Customerhas Contacts,或者 aSupportAgent是a的成员Department。这些是我设计中的聚合。
让我们Department举个例子。ADepartment的状态由标题、描述、一些其他属性以及作为SupportAgent该部门成员的代理的id列表组成。ASupportAgent的状态由姓名、姓氏、电话号码、电子邮件等组成,以及Department该代理所属部门的ID列表。
现在,当AddAgentToDepartment(agentId, departmentId)处理类型为Command 时,会发出两个事件。一个DepartmentAdded是发出将增加部门ID为座席的状态相应的代理,并且SupportAgentAdded发出了相应的部门,将增加代理ID进入部门的状态。
我的第一个问题是:将相关聚合的 id 保持在聚合状态是否正确?“正确”是指这是最佳实践吗?或者还有另一种方式(例如,在一种“部门成员管理器”实体/聚合或其他东西中保持关系。实际上这个实体或任何东西在这里是一种单例。在 DDD 世界中是否有这样的东西)?
我的另一个想法是关于事件重播。在前面的示例中,发出了两个事件,但为了更新视图,只需要处理其中一个,因为这两个事件描述了系统状态中完全相同的转换(代理和部门链接)。我选择只处理SupportAgentAdded事件来更新视图。我的事件处理程序执行一个 SQL 脚本来更新相应的数据库表以反映系统的当前状态。
如果我们需要重放某些事件以仅使某个聚合的视图处于一致状态,会发生什么?具体来说,当我想为支持代理重播事件时,只会重播事件DepartmentAdded,并且这些事件不会被任何人处理,因此不会更新视图。为了使整个系统进入一致状态,部分重放某些事件还是应该重放事件存储中的所有事件是否正确?
如果你是 DDD 和 ES 专家,或者至少你有经验,我想得到一些提示,你可能会看到我在做什么或思考什么,错了,我应该看什么方向。
domain-driven-design aggregate aggregateroot cqrs event-sourcing
早上好,
我已经读过很多次了,在 AR 中应该避免使用 setter 和 getter。虽然我可以理解使用 setter 的原因,但当它们显然是业务的一部分时,我对 getter 有点不同意。
让我们想象以下用户AR:
namespace vendor\Domain\Model;
class User
{
private $userId;
private $username;
private $password;
private $email;
static public register(...): User { ... } // Ubiquitous Language
public function unregister(...) { ... } // Ubiquitous Language
public function changePassword(...) { ... } // Ubiquitous Language
public function changeEmail(...) { ... } // Ubiquitous Language
public function getAggregateId(): UserId { ... } // A getter
public function getUsername(): UserName { ... …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取度量的总和、平均值和计数
df.groupby(['id', 'pushid']).agg({"sess_length": [ np.sum, np.mean, np.count]})
Run Code Online (Sandbox Code Playgroud)
但是我得到“模块'numpy'没有属性'count'”,并且我尝试了不同的方式来表达计数功能,但无法让它工作。我如何将汇总记录数与其他指标一起汇总?
我得到了一个数据帧:
a <- c('A','A','B','B','A')
b <- c(1,1,1,1,2)
c <- c(NA,60,NA,100,NA)
d <- c(10,NA,10,NA,100)
frame <- data.frame(a,b,c,d)
> frame
a b c d
1 A 1 NA 10
2 A 1 60 NA
3 B 1 NA 10
4 B 1 100 NA
5 A 2 NA 100
Run Code Online (Sandbox Code Playgroud)
我想通过 a 和 b 聚合它
>frame2
a b c d
1 A 1 60 10
3 B 1 100 10
5 A 2 NA 100
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法,例如来自 dplyr 的 agregat() 和 group,但不知何故它永远不起作用。我猜NA是一个问题。
我正在使用这个数据集census.csv
代码:
df = pd.read_csv('Data/census.csv')
df = df[df['SUMLEV']==50]
print(df.head())
Run Code Online (Sandbox Code Playgroud)
这是我的数据的样子:
SUMLEV REGION DIVISION ... RNETMIG2013 RNETMIG2014 RNETMIG2015
1 50 3 6 ... -2.722002 2.592270 -2.187333
2 50 3 6 ... 22.727626 20.317142 18.293499
3 50 3 6 ... -7.167664 -3.978583 -10.543299
4 50 3 6 ... -5.403729 0.754533 1.107861
5 50 3 6 ... -1.402476 -1.577232 -0.884411
Run Code Online (Sandbox Code Playgroud)
我想在按“STNAME”分组后对两列进行汇总:
(df.set_index('STNAME').groupby(level=0)['POPESTIMATE2010','POPESTIMATE2011'].agg(Avg= np.average, Sum = np.sum))
Run Code Online (Sandbox Code Playgroud)
错误:
----> 3 (df.set_index('STNAME').groupby(level=0)['POPESTIMATE2010','POPESTIMATE2011'].agg(Avg= np.average, Sum = np.sum))
f:\software_installations\anaconda3\lib\site-packages\pandas\core\groupby\generic.py in aggregate(self, func, *args, **kwargs)
922 elif …Run Code Online (Sandbox Code Playgroud) aggregate ×10
group-by ×3
sql ×3
pandas ×2
python ×2
r ×2
cqrs ×1
e-commerce ×1
getter ×1
mean ×1
merge ×1
mysql ×1
na ×1
navigation ×1
oracle ×1
php ×1
postgresql ×1
sql-server ×1