我有一个名为的表medias
,最近刚刚在其中添加了一个名为sort_order
type的新列Int
。
行值将不是整个表唯一的,而是它们各自的owner_user_id
字段唯一的。无论如何,我什至不在乎它们的独特性。
所有这些的目的是允许用户设置他们上传的照片的排序顺序(最多10张,并且可以拖动和重新排序等)。当用户“删除”照片时,我不会删除记录,我只是在该行上设置了一个visible
字段false
。
Aaaanyway,我要介绍一个添加的迁移sort_order
(它们以前无法订购照片,它们只会根据进行排序order by created_at asc
)。
自添加新字段以来,我使新字段sort_order
具有默认值10
(以便向后兼容尚未更新应用程序的人员)。
我能够提出以下查询:
select
owner_user_id,
sort_order, rank() over (PARTITION BY owner_user_id ORDER BY sort_order asc, created_at asc) as new_sort_order
from medias
where visible=true
order by sort_order asc, created_at asc;
这会吐出类似于以下内容的内容:
owner_user_id | sort_order | new_sort_order
---------------+------------+---------------
76 | 10 | 1
76 | 10 | 2
76 | 10 | 3
76 | 10 | 4
76 | 10 | 5
9 | 10 | 1
9 | 10 | 2
9 | 10 | 3
9 | 10 | 4
9 | 10 | 5
79 | 10 | 1
79 | 10 | 2
87 | 10 | 1
87 | 10 | 2
87 | 10 | 3
85 | 10 | 1
90 | 10 | 1
90 | 10 | 2
90 | 10 | 3
在这一点上我真正想要做的是集合sort_order
到rank()
。有关如何执行此操作的任何想法?
由于您没有唯一的密钥,请使用ctid
:
update medias m
set sort_order = new_sort_order
from (
select
ctid,
owner_user_id,
sort_order,
row_number() over w as new_sort_order
from medias
where visible
window w as (partition by owner_user_id order by sort_order asc, created_at asc)
) s
where m.ctid = s.ctid;
请注意,row_number()
可能会比rank()
第一个绝不提供重复项更好。
我试图在火花数据帧中使用rowNumber。我的查询在Spark shell中按预期工作。但是当我在eclipse中写出它们并编译一个jar时,我面临着一个错误 我的问题 在Spark shell中运行查询时,我没有使用HiveContext。不确定为什么它返回一个错误,当我运行相同的jar文件。如果有帮助的话,我也在Spark 1.6.0上运行脚本。有人面临类似的问题吗?
问题内容: 我正在探索Hive中的窗口功能,并且能够理解所有UDF的功能。虽然,我无法理解我们与其他功能配合使用的分区和顺序。以下是与我计划构建的查询非常相似的结构。 只是试图了解两个关键字都涉及的后台过程。 感谢帮助:) 问题答案: 分析函数为数据集中每个分区的每一行分配一个等级。 子句确定行的分布方式(如果是配置单元,则在缩减程序之间)。 确定行在分区中的排序方式。 第一阶段由分配 ,数据集中
问题内容: 我正在尝试将某些Windows函数(和)用于数据框,但我不知道如何使用它们。 有人可以帮我吗?在Python API文档 中,没有关于它的示例。 具体来说,我正在尝试获取数据框中数字字段的分位数。 我正在使用Spark 1.4.0。 问题答案: 要使用窗口功能,您必须先创建一个窗口。定义与普通SQL几乎相同,这意味着您可以定义顺序,分区或同时定义两者。首先让我们创建一些虚拟数据: 确保
问题内容: 运行以下代码: 结果是: 上面的代码中没有定义任何窗口框架,它看起来默认的窗口框架是 不确定我对默认窗口框架的理解是否正确 问题答案: 从Spark Gotchas 默认帧规格取决于给定窗口定义的其他方面: 如果指定了ORDER BY子句,并且该函数接受了帧规范,则该帧规范是由RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW定义的, 否
我每年都通过联接进行
问题内容: 我有一个事件表,其中包含以下字段: 给定一个持续时间和一个数字,我需要在持续时间的任何相对时间窗口中,对所有大于事件的事件进行计数。这基本上需要针对每个事件的滑动窗口。例如,我希望所有event_type在10分钟的持续时间内具有超过5个事件的活动。 我不确定如何在没有窗口功能的情况下解决此问题。 (我使用的是mysql 5.6。我在说的是一百万行以下的数据集。) 问题答案: MySQ