假设有一个包含两列的简单审计表(在生产中有更多列):
ID | Date
Run Code Online (Sandbox Code Playgroud)
处理请求时,我们在此表中添加一条记录.请求分批处理,批处理中可以有任意数量的项目.对于每个项目,我们将添加一条记录.批次之间将存在至少2秒的延迟(该数量是可配置的).
性能是通过每单位时间(例如每秒)处理请求的速度来衡量的.考虑这个示例数据(2个集群,项目数量相同,仅用于演示目的):
--2016-01-29 10:27:25.603
--2016-01-29 10:27:25.620
--2016-01-29 10:27:25.637
--2016-01-29 10:27:25.653
--2016-01-29 10:27:25.723
--Avg time between requests = 24ms
--2016-01-29 10:27:34.647
--2016-01-29 10:27:34.667
--2016-01-29 10:27:34.680
--2016-01-29 10:27:34.690
--2016-01-29 10:27:34.707
--Avg time = 12ms
Run Code Online (Sandbox Code Playgroud)
我们可以说,在最坏的情况下,每秒可以处理41.67个请求,最多可以处理83.33个请求.很高兴知道平均批次性能.
题.是否可以单独使用T-SQL获取这些指标以及如何使用?
编辑:要使结果具有统计显着性,丢弃批次可能比小于10个项目(可配置)更有用.
问题:从存储库中重新合成聚合的最佳,有效和面向未来的方法是什么?提供方式的专家和内容是什么,我的看法是否正确?
假设我们有一个带私有setter的Aggregate Root,但是有一个用于访问状态的公共getter
行为是通过聚合根上的方法完成的.
指示存储库加载聚合.
目前我看到了几种可能的方法来实现这一目标:
1)Jimmy Bogard暗示他的工具Automapper不适用于双向映射.但有些人认为我们必须务实,以一种帮助你的方式使用工具.
对我来说,我不喜欢通过反射完全补液.也许Automapper存在,或者聚合根被弯曲,这样就可以完成映射(参见Vaughn对他的文章的一些评论).
2)创建用于补液的构造因子,具有几个参数,因此聚集体的状态以正确的方式再水合.
这几个参数可以扩展(=新构造函数)或定义可以更改.我喜欢这种方法,除了有一堆参数的部分.
3)状态是聚合根的属性.状态被封装在一个新对象中,该对象由存储库构建,然后被提供给聚合根以获得正确的init.
有些人认为构建这个状态对象是更多的工作(新类,实体上的状态属性暴露和聚合根来强制执行业务规则),但它提供了一种初始化状态的简洁方法.
假设我们需要事件源,加载状态是否类似于加载事件?状态对象是否提供了处理事件的方法?它是未来的证据吗?
是否可以group_by使用dplyr在列名上使用正则表达式匹配?
library(dplyr) # dplyr_0.5.0; R version 3.3.2 (2016-10-31)
# dummy data
set.seed(1)
df1 <- sample_n(iris, 20) %>%
mutate(Sepal.Length = round(Sepal.Length),
Sepal.Width = round(Sepal.Width))
Run Code Online (Sandbox Code Playgroud)
按静态版本分组(外观/工作正常,想象一下,如果我们有10-20列):
df1 %>%
group_by(Sepal.Length, Sepal.Width) %>%
summarise(mySum = sum(Petal.Length))
Run Code Online (Sandbox Code Playgroud)
动态分组- "丑陋"版本:
df1 %>%
group_by_(.dots = colnames(df1)[ grepl("^Sepal", colnames(df1))]) %>%
summarise(mySum = sum(Petal.Length))
Run Code Online (Sandbox Code Playgroud)
理想情况下,这样的事情(不起作为starts_with返回索引):
df1 %>%
group_by(starts_with("Sepal")) %>%
summarise(mySum = sum(Petal.Length))
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)Error in eval(expr, envir, enclos) : wrong result size (0), expected 20 or 1
预期产量:
# Source: local data frame …Run Code Online (Sandbox Code Playgroud) 我有一个 pandas 数据框定义如下:
import pandas as pd
headers = ['Group', 'Element', 'Case', 'Score', 'Evaluation']
data = [
['A', 1, 'x', 1.40, 0.59],
['A', 1, 'y', 9.19, 0.52],
['A', 2, 'x', 8.82, 0.80],
['A', 2, 'y', 7.18, 0.41],
['B', 1, 'x', 1.38, 0.22],
['B', 1, 'y', 7.14, 0.10],
['B', 2, 'x', 9.12, 0.28],
['B', 2, 'y', 4.11, 0.97],
]
df = pd.DataFrame(data, columns=headers)
Run Code Online (Sandbox Code Playgroud)
在控制台输出中看起来像这样:
Group Element Case Score Evaluation
0 A 1 x 1.40 0.59
1 A 1 y 9.19 …Run Code Online (Sandbox Code Playgroud) 我有表“event_statistics”,其定义如下:
\n\nCREATE TABLE public.event_statistics (\n id int4 NOT NULL DEFAULT nextval(\'event_statistics_id_seq\'::regclass),\n client_id int4 NULL,\n session_id int4 NULL,\n action_name text NULL,\n value text NULL,\n product_id int8 NULL,\n product_options jsonb NOT NULL DEFAULT \'{}\'::jsonb,\n url text NULL,\n url_options jsonb NOT NULL DEFAULT \'{}\'::jsonb,\n visit int4 NULL DEFAULT 0,\n date_update timestamptz NULL,\nCONSTRAINT event_statistics_pkey PRIMARY KEY (id),\nCONSTRAINT event_statistics_client_id_session_id_sessions_client_id_id_for \nFOREIGN KEY \n(client_id,session_id) REFERENCES <?>() ON DELETE CASCADE ON UPDATE CASCADE\n)\nWITH (\n OIDS=FALSE\n) ;\nCREATE INDEX regdate ON public.event_statistics (date_update \ntimestamptz_ops) ;\nRun Code Online (Sandbox Code Playgroud)\n\n和表“客户”: …
考虑以下聚合:
\n\nlet getUsersWithNoPersonsPromise = () => {\n\n let pipeline = [\n {\n $lookup: {\n from: "persons",\n localField: "id",\n foreignField: "person_id",\n as: "persons_users"\n }\n },\n {\n $match: {\n "persons_users:0": {\n $exists: false\n }\n }\n }\n ];\n\n\n return User.aggregate(pipeline).exec();\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如何将$match结果转换为 UserModel 类型?I\xc2\xb4m 在其上获取普通的 javascript 对象,并且我希望收到 mongoose User 类型对象。
我想生成一个数据透视表,每个数据透视列有 2 个总和聚合。然后在枢轴列的右侧,我想要一些总列。最后,枢轴列的数量是动态的。我的首选结果如下:
我的数据如下所示:
从这个答案来看,我已经非常接近解决它了。这是我所拥有的:
SELECT *
FROM (
SELECT B.SiteID, R.BuildingID, C.*
FROM Rooms R JOIN Buildings B
ON R.BuildingID = B.BuildingID
CROSS APPLY (
VALUES(RTRIM(RoomType) + ' NASF', AreaNASF)
,(RTRIM(RoomType) + ' RSF', AreaRSF)
) C (Item,Value)
) src
PIVOT (
SUM([Value])
FOR [Item] IN ([CONFERENCE NASF], [CONFERENCE RSF], [OFFICE NASF], [OFFICE RSF], [STORAGE NASF], [STORAGE RSF])
) pvt
Run Code Online (Sandbox Code Playgroud)
其产生:
我的印象是我必须在 SQL 之外执行两行标题。我需要帮助的是如何添加总列数。STUFF另外,除了我在很多地方看到的解决方案之外,还有更好的动态列解决方案吗?
以下是创建示例数据的 SQL:
CREATE TABLE Buildings (
BuildingID CHAR(12),
SiteID CHAR(12),
Name …Run Code Online (Sandbox Code Playgroud) 我正在尝试找到在 Redshift 中表示和聚合高基数列的最佳方式。源是基于事件的,看起来像这样:
| 用户 | 时间戳 | 事件类型 |
|---|---|---|
| 1 | 2021-01-01 12:00:00 | 富 |
| 1 | 2021-01-01 15:00:00 | 酒吧 |
| 2 | 2021-01-01 16:00:00 | 富 |
| 2 | 2021-01-01 19:00:00 | 富 |
在哪里:
我想将这些数据聚合成一个更小的数据集,每个用户只有一条记录(文档)。这些文件随后将被导出。感兴趣的聚合是这样的:
但是也:
我发现后一种情况很困难。
解决此问题的简单“列数据库友好”方法就是为每个事件类型创建一个聚合列:
| 用户 | nb_事件 | ... | NB_foo | nb_bar |
|---|---|---|---|---|
| 1 | 2 | ... | 1 | 1 |
| 2 | 2 | ... | 2 | 0 |
但我认为这不是一个合适的解决方案,因为 event_type 字段是动态的,可能有数百或数千个值(Redshift 的上限为 1600 列)。而且,这个 event_type 字段上可能有多种类型的聚合(不仅仅是count)。
第二种方法是将数据保持垂直形式,其中不是每个用户一行,而是每个(user, event_type)一行。然而,这实际上只是推迟了问题——在某些时候,数据仍然需要聚合成每个用户的单个记录以实现目标文档结构,并且列爆炸的问题仍然存在。
该数据的更自然的(我认为)表示是稀疏数组/文档/SUPER:
| 用户 | nb_事件 | ... | 按事件类型计数(超级) |
|---|---|---|---|
| 1 | 2 | ... … |
如何合并/减少 DataFrame,以便它按自定义列“id”合并行,并将值放入列表中(如果它们不是 Nan)。到目前为止,我想出了这个,但它并没有删除 Nans:
x: pd.DataFrame = df_chunk.groupby('id', dropna=True).agg(lambda x: list(x))
for row in x.itertuples():
print(row)
Run Code Online (Sandbox Code Playgroud)
所以结果是:
Pandas(Index=1, surname=['Bruce', nan, nan], given_name=['Erin', nan, nan], date_of_birth=['11/03/1961', '11/04/1961', '11/06/1961'], address=['10 Kestrel Wood Way, York', '4 Ward Avenue, Cowes', '11 Woodhill Court, Woodside Road, Amersham'], postcode=['YO31 9EJ', 'BD10 0LT', 'WA14 1LH'], mobile=['+64 21 421 2300', '+64 29 975 1551', '+64 22 5491 7112'])
Run Code Online (Sandbox Code Playgroud)
期望的结果是 surname=['Bruce']、given_name=['Erin'] 等等
在 C++ 中,我有这个来自 C 的结构。这段代码非常旧,无法修改:
struct Point {
double coord[3];
};
Run Code Online (Sandbox Code Playgroud)
另一方面,我有这个现代函数,它返回现代std::array而不是原始数组:
std::array<double, 3> ComputePoint();
Run Code Online (Sandbox Code Playgroud)
目前,为了Point从返回值初始化 a,我手动从 中提取每个元素std::array:
std::array<double, 3> ansArray{ComputePoint()};
Point ans{ansArray[0], ansArray[1], ansArray[2]};
Run Code Online (Sandbox Code Playgroud)
这个解决方案是可行的,因为只有三个坐标。我可以将其模板化为一般长度吗?我想要类似相反的转换:std::to_array。
aggregate ×10
dataframe ×2
pandas ×2
sql ×2
sql-server ×2
t-sql ×2
arrays ×1
automapper ×1
c++ ×1
casting ×1
dplyr ×1
mongodb ×1
mongoose ×1
nan ×1
pivot ×1
pivot-table ×1
postgresql ×1
python ×1
python-3.x ×1
r ×1
stdarray ×1