语境
我的任务是尝试检测 Amazon Redshift (PostgreSQL) 系统中时间序列数据中的异常值。也称为办公室周围的公共假期探测器。我一直使用的方法采用前 N 个数据点的窗口平均值,我还有一个窗口标准偏差,然后获取有关前 N 个点的统计数据并将以下内容应用于当前数据点:
(x0 - avg(x1:xN)) / stddev(x1:xN) > threshold
Run Code Online (Sandbox Code Playgroud)
因此,窗口长度和阈值已经足够使用,但这种方法不是一个稳健的方法,因为在广告活动之后我们有了显着的增长,然后该系列大大偏离了运行平均值和标准差阈值,一切都是异常值。
减少窗口长度可以使其更快地适应这些变化,但它没有那么好的长期模型。
增加这种增长的阈值意味着我们之前检测到的异常值将不再被检测到。
这些相关问题在 R 中提供了建议,但答案经常提到中值绝对偏差作为一种稳健的方法:
https://en.wikipedia.org/wiki/Median_absolute_deviation
太长了;博士
如何在 Amazon Redshift 中对时间序列数据集实施中值绝对偏差?
我不确定我是否遗漏了该方法的一些基本知识,但我希望它仅适用于窗口,而不适用于整个数据集。尽管中值窗口函数不允许使用框架子句。
如果不是这种方法,那么请为我指出 Amazon Redshift 中更复杂的异常值检测查询的正确方向,我将不胜感激。
我有一个非常标准的问题,我无法解决。我想在 redshift 中删除一个DROP USER u_A;返回我的用户:user "u_A" cannot be dropped because the user has a privilege on some object。
问题是我不知道这是什么特权以及针对什么对象。
在 PostgreSQL 中,我只想REASSIGN OWNED BY u_A TO u_B在 u_B 是其他用户的地方。问题是 redshift 不支持 REASSIGN。我拥有的表和模式的数量太大(所以我不能随意尝试所有内容,希望在某个时候我会删除所需的特权。
那么如何删除该用户呢?
如何返回包含列元胞数组中特定值的行?
想象一下我们有一个像这样的表:
id name phone values
1 Taylor xxx.xxx.xxxx [4,6,5]
2 John yyy.yyy.yyyy [1,5,2]
3 Peter zzz.zzz.zzzz [6,2,6]
Run Code Online (Sandbox Code Playgroud)
我需要创建一个 SQL 查询,该查询将返回数组中存在值“6”的行values。所以预期的输出是:
id name phone values
1 Taylor xxx.xxx.xxxx [4,6,5]
3 Peter zzz.zzz.zzzz [6,2,6]
Run Code Online (Sandbox Code Playgroud)
我们正在 Redshift 中工作。json_extract_array_element_text('json_string', pos)因此,如果更容易的话,可以使用该功能的可能性。请注意,值数组的长度可能彼此不同。
我想了解为什么我有不同的结果
我有一个名为 active_transfert 的表,用于记录图像传输
user_id | image_id | created_at
--------|----------|-----------
1 |1 |2014-07-10
1 |2 |2015-01-21
2 |1 |2015-05-23
3 |1 |2016-07-22
4 |6 |2017-06-01
4 |6 |2014-08-22
Run Code Online (Sandbox Code Playgroud)
我想为每个 image_id 返回唯一的 user_id。
SELECT user_id,
image_id
FROM active_transfert
GROUP BY user_id,
image_id; --50
SELECT user_id,
image_id
FROM
(SELECT user_id,
image_id,
rank() OVER (PARTITION BY user_id, image_id
ORDER BY created_at DESC) AS i_ranked
FROM active_transfert) AS i
WHERE i.i_ranked = 1; -- 53
Run Code Online (Sandbox Code Playgroud)
我对 Redshift 运行这些查询。为什么我的第二个查询不能防止重复记录(相同的 user_id 和 image_id)?
预期结果 :
user_id …Run Code Online (Sandbox Code Playgroud) 我们正在构建一个商业智能系统,我们有一个巨大的 PostgreSQL 数据库 (DB),可以在其中进行所有信息处理,还有一个 Redshift 数据仓库 (DWH),可以在其中存储数据并执行查询。
后端是用 Java Server Faces (JSF) 构建的,之前的查询都是线性的。有些视图需要一分多钟的时间才能完成查询并将信息加载到屏幕中,因此我们决定在 Java 中使用线程并使查询异步。
因此,我们为每个视图准备了必要的查询,以便从我们的 EC2 应用程序机器并行运行到我们的 Redshift DWH,并运行线程,但视图仍然需要很长时间才能加载,有时甚至更长。
我们在文档中发现:
http://docs.aws.amazon.com/redshift/latest/dg/cm-c-executing-queries.html
http://docs.aws.amazon.com/redshift/latest/dg/c_troubleshooting_query_performance.html
http://docs.aws.amazon.com/redshift/latest/dg/r_wlm_query_slot_count.html
默认情况下,redshift 同时接收 5 个查询,但我们可以更改此设置。
有 3 个主要因素需要考虑:查询槽、并发和队列。我们已经明白了这一点:
队列就像 Java 中的线程。查询到达并被指定到“负载较少”队列,然后等待轮到它得到解决。我们可以有任意数量的队列。队列分配了一些内存(我们猜是平均分配的?)在队列中我们可以分配用户组或查询组。但短期来看,我们现在无法在查询中完成大量分类工作。
并发度是队列可以并行运行的查询量。默认为 5。
查询槽是查询可以使用的内存量。正如我们所理解的,它与并发有关。队列的并发性越高,每个查询槽中的内存就越少。
我们尝试过有 3 个队列,每个队列并发数为 5,但性能仍然很慢。
那么,如果我们理解正确的话,有些视图会进行 25-28 次查询,并且总加载时间约为 60 秒,那么我们如何保留设置才能更快地解决查询呢?
performance parallelism redshift amazon-rds query-performance
我知道这个错误消息的含义Value too long for character type character varying(100)。因此,我经常寻找导致问题的行,并根据要求适当地修复它们。
但我今天遇到了一个奇怪的问题,即使没有粗行,也会发生错误。
插入查询失败:
INSERT INTO training.archive_temp1 (id, booking, email, pcd_temp, property_id)
WITH x_pcd AS (
SELECT e.id,
e.booking,
e.email,
CASE
WHEN LENGTH(e.pch) > 0 THEN (e.pch || ':' || e.pcd)
ELSE e.pcd
END AS pcd_temp,
e.pcd
FROM public.extracts_temp AS e WHERE e.id BETWEEN 274939128 AND 275083166
)
SELECT x.id,
x.booking,
x.email,
x.pcd_temp,
COALESCE(c2.property_id, c.property_id)
FROM x_pcd AS x
LEFT JOIN public.property_codes AS c ON x.pcd_temp = c.code
LEFT JOIN public.property_codes AS …Run Code Online (Sandbox Code Playgroud) 我收到了另一个团队发来的列名列表。为了确保所有字段列名称在特定模式内有效,我将它们放入临时表中。我现在想看看它们是否存在。当我尝试加入 时information_schema.columns,我收到以下错误:
ERROR: 0A000: Specified types or functions (one per INFO message) not supported on Redshift tables.
Column "c.column_name" has unsupported type "information_schema.sql_identifier".
Column "a.*" has unsupported type "pg_attribute".
Column "t.*" has unsupported type "pg_type".
Function "format_type(oid,integer)" not supported.
Function "format_type(oid,integer)" not supported.
Function "has_table_privilege(oid,text)" not supported.
Function "has_table_privilege(oid,text)" not supported.
Function "has_table_privilege(oid,text)" not supported.
Function "has_table_privilege(oid,text)" not supported.
Run Code Online (Sandbox Code Playgroud)
我尝试过塑造column_name不同的类型,但没有成功。有人可以告诉我出了什么问题以及我如何实现这个目标吗?
我正在尝试将表从 SQL 服务器移动到 AWS Redshift。在尝试移动 NVARCHAR 字段时,我读到 Redshift 在内部将 NVARCHAR 转换为 VARCHAR。那么,SQL Server 中的 NVARCHAR(100) 将等同于 Redshift 中的 VARCHAR(100) 或 Varchar(200) 吗?如果我想直接将 SQLServer 中的 NVARCHAR 字段定义为 Redshift 中的 VARCHAR,是否需要将字段长度加倍?
具体来说,我有一个事件表,用于记录用户加入或离开团队的时间。它看起来像下面这样:
-------------------------------------
| user | event | team | timestamp |
-------------------------------------
| A | joined | 1 | 2016-1-1 |
| B | joined | 1 | 2016-1-1 |
| C | left | 1 | 2016-1-1 |
| C | joined | 2 | 2016-1-1 |
| A | left | 1 | 2016-1-2 |
| A | joined | 2 | 2016-1-2 |
| B | left | 1 | 2016-1-3 |
| A | left | …Run Code Online (Sandbox Code Playgroud) redshift ×9
postgresql ×2
amazon-rds ×1
aws ×1
catalogs ×1
errors ×1
parallelism ×1
performance ×1
permissions ×1
pivot ×1
rank ×1
sql-server ×1