小编tim*_*hap的帖子

Redshift SUPER 类型上的聚合

语境

我正在尝试找到在 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

在哪里:

  • 用户数量非常多
  • 单个用户可以拥有大量事件,但不太可能拥有许多不同的事件类型
  • 不同event_type值的数量非常大,并且不断增长

我想将这些数据聚合成一个更小的数据集,每个用户只有一条记录(文档)。这些文件随后将被导出。感兴趣的聚合是这样的:

  • 活动数量
  • 最近活动时间

但是也:

  • 每个 event_type 的事件数

我发现后一种情况很困难。

我考虑过的解决方案

解决此问题的简单“列数据库友好”方法就是为每个事件类型创建一个聚合列:

用户 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 ... …

aggregate correlated-subquery amazon-redshift

5
推荐指数
0
解决办法
1338
查看次数

建议在 Chrome Ext 中异步下载文件名

我正在编写我的第一个简单的 Chrome 扩展程序,它应该根据下载的选项卡的标题将下载内容组织到子文件夹中。我计划将来扩展它,但目前我什至无法让这个简单的功能发挥作用。问题似乎是无法从异步选项卡查询中调用“文件名建议”函数。下面的代码是后台JavaScript文件的完整内容:

chrome.downloads.onDeterminingFilename.addListener(function (item, __suggest) {

    //Find active tab
    chrome.tabs.query({ active: true }, function (tabs) {
        var activeTab = tabs[0];

        //Generate filepath
        var filepath = activeTab.title + "/" + item.filename;

        //TODO: Sanitize filepath.

        //Suggest filename for this download.
        __suggest({ filename: filepath });
    })

});  
Run Code Online (Sandbox Code Playgroud)

控制台记录的错误是:

suggestCallback may not be called more than once. (extensions::downloads:42)
Run Code Online (Sandbox Code Playgroud)

我已经检查过建议函数(在我的 JS 中)肯定只被调用一次。我有什么想法可以解决/解决这个问题吗?

javascript google-chrome-extension

3
推荐指数
1
解决办法
557
查看次数