- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我遇到了一个问题,即物化 View 的行限制超过了 Postgres 数据库中允许的最大值。
名为 PAC4200_Metering
的表有 108 个字段,它们都是 double 字段。我想存储表的具体化缓存,我在其中存储一个 JSON 对象,其中包含时间段内字段的平均值、最大值、最小值等键。
SELECT
"deviceId",
time_bucket('1 hours', "time") as starttime,
json_build_object(
'average', avg("voltage_an"),
'maxvalue', max("voltage_an"),
'minvalue', min("voltage_an"),
'sum', sum("voltage_an"),
'firstvalue', first("voltage_an", "time"),
'firsttime', min("time" AT TIME ZONE 'UTC'),
'lasttime', max("time" AT TIME ZONE 'UTC'),
'lastvalue', last("voltage_an", "time"),
'sd', stddev_pop("voltage_an") ,
'countgood', COUNT(*),
'countbad', 0,
'countuncertain', 0
) AS "voltage_an"
...
FROM
"PAC4200_Metering"
GROUP BY
"deviceId",
starttime
INFO: new materialization range for public.PAC4200_Metering larger than allowed in one run, truncating (time column time) (1568760300000000)
INFO: new materialization range for public.PAC4200_Metering (time column time) (1568708100000000)
INFO: materializing continuous aggregate public.PAC4200_Metering_15_minute: new range up to 1568708100000000
ERROR: row is too big: size 12456, maximum size 8160
CONTEXT: SQL statement "INSERT INTO _timescaledb_internal._materialized_hypertable_1108 SELECT * FROM _timescaledb_internal._partial_view_1108 AS I WHERE I.starttime >= '-infinity' AND I.starttime < '2019-09-17 08:15:00+00';"
SQL state: 54000
我没有填充为 JSON 对象,而是尝试将每个键(平均值、最小值、最大值等)存储为类似于“voltage_an_avg”、“voltage_an_min”、“voltage_an_max”和然后以这种方式访问它们,但我仍然遇到同样的限制。
最佳答案
您不能更改行限制,因为每行必须适合一个页面,即 8K。
由于值是 double 字段,将它们放入 JSON 中可能会丢失数字精度。这是一般 JSON 格式的限制。因此,您需要放弃在连续聚合中使用 JSON 或重新考虑类型,以便它们适合 JSON 的 NUMERIC 字段(单精度)。
由于行限制为 8160 字节,因此可以容纳大约 1000 个字段。如果您避免具体化聚合(稍后可以计算),这可能足以适合您的所有列。例如,average
可以根据 sum
和 countgood
计算得出。虽然 countbad
和 countuncertain
在您的示例中不包含任何信息。
如果OP查询用于创建连续聚合,可以改写为:
SELECT
"deviceId",
time_bucket('1 hours', "time") as starttime,
max("voltage_an") as maxvalue,
min("voltage_an") as minvalue,
sum("voltage_an") as sum,
first("voltage_an", "time") as firstvalue,
min("time" AT TIME ZONE 'UTC') as firsttime,
max("time" AT TIME ZONE 'UTC') as lasttime,
last("voltage_an", "time") as lastvalue,
stddev_pop("voltage_an") as sd,
COUNT(*) countgood,
...
FROM
"PAC4200_Metering"
GROUP BY
"deviceId",
starttime
如果 voltage_an
是 108 个不同值之一,并且上面计算了 8 个聚合,则它将是 108*8*8 + 3*8 = 6912 + 24 = 6936 字节最大值。
然后你可以从连续聚合中得到与原始查询相同的结果:
SELECT
"deviceId",
starttime,
json_build_object(
'average', "sum"/"countgood",
'maxvalue', "maxvalue",
'minvalue', "minvalue",
'sum', "sum",
'firstvalue', "firstvalue",
'firsttime', "firsttime",
'lasttime', "lasttime",
'lastvalue', "lastvalue",
'sd', "sd",
'countgood', "countgood",
'countbad', 0,
'countuncertain', 0
) AS "voltage_an"
...
FROM
CAGG
也可以定义几个连续聚合,然后将它们连接起来。
我建议仔细考虑需要具体化多少信息,因为没有免费的东西。例如,它占用空间。此外,让每一行占据整个 8K 页面会进一步影响 PostgreSQL 的效率。
关于sql - TimeScaleDB 物化行太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57983208/
您好,我在我的项目中使用 Nuxt JS,我注意到我的 js 文件变得相当大 我的问题是如何缩小或拆分超过 1mb 的 vendor 或 js 文件 我还看到 font-awesome 也占用了很多空
github 只是告诉我,而不是提交差异——关于我的一个提交—— Sorry, this diff is taking too long to generate. It may be too larg
这个非常简单的绘图命令创建了一个 11x11 像素的跟踪红色矩形: _sp.graphics.lineStyle( 1, 0xFF0000, 1, true, LineScaleMode.NORMAL
我正在尝试创建一个 Mac 应用程序。但是在我使用 Interface Builder 插入组合框并运行应用程序后,我收到以下消息: This application is trying to dra
我通过 url 传递以下数据: '; echo 'Download PDF'; echo ''; ?> 这里$result包含数组形式的 RSS 提要数据。我正在使用 urlencode(
我正在尝试通过 JavaScript 从某人的网络摄像头拍摄快照。该代码可以工作,只是生成的图像对我来说被拉伸(stretch)太多而难以阅读。 我搞乱了:ctx.drawImage(video, 0
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 3年前关闭。 Improve this
我是 React 和 Webpack 代码分割的新手,所以我不确定这对于捆绑 block 来说是否合适。 我尝试根据路由 ( basically done the same thing as in t
我正在开发自己的电子书应用程序。我的书共有 15 章,因此我有一个包含 15 个元素的列表 - 每个元素都是一个包含所有章节文本的字符串。 我还有 15 个 .ogg 文件,是我花钱请配音人员录制的。
我正在部署一个应用程序,该应用程序具有大约 10 个库依赖项(我正在使用 cocoapods)和 appstore 上 30MB 的下载大小,但是当我归档产品以供 Appstore 上传时,xcarc
我正在开发一款全屏游戏,我正在尽最大努力确保它适合所有屏幕尺寸。这被证明是相当困难的,因为当我使用 pygame.FULLSCREEN 时,窗口比屏幕大得多。为了解决这个问题,我根据 python 将
我有一个项目,其中有一些UIbuttons,其中显示了不同的UIimages。通过用户交互,UIButtons 中可能存在任何 UIimages。该项目中有大约 1000 张图像。我已经初始化了一个名
我使用 Eclipse 中的 Window Builder 将 JTextField 添加到 JPanel 中,无论我尝试什么,文本字段都会显示如下: (来源:gyazo.com) 我尝试更改首选尺寸
我有一个查询,我正在选择一个大型数据集,并且由于连接表的一对多关系而花费了非常多的时间。我有三个表——简化后如下: 客户 | customers | CREATE TABLE `customers`
我在 Activity 中使用了一个 PopupWindow,除了 PopupWindow 中包含的元素的填充外,一切正常> - 它太大了 - 几乎占据了 PopupWindows 的大部分小空间。这
这个问题在这里已经有了答案: NSString intValue not working for retrieving phone number (2 个答案) 关闭 9 年前。
我对为什么我的图片大小不正确感到有点困惑。我将 44x44 大小的图像传递给默认行高为 44 像素的 UITableView,但我得到以下结果: 这不是我应该如何设置我的 UITableViewCel
我目前正在用 php 显示用户个人资料图片,如果他们单击它,就会转到他们自己的个人资料。图像显示正确并且链接有效,但链接的区域超出了图片并超过了附近的链接。我将如何减少 anchor 的面积?
这张图片太大了,我想让它适合窗口的大小:http://zgaming.comxa.com 但是我不明白怎么办,我也试过高度和宽度100% html CSS .bgimg { posi
减少矩阵大小的方法在哪里? (x2 阵列)例如,我只需要将数据 (0, 1, 2) 存储到数组中但元素最多可达 250 000。?有没有办法存储值,比如在字典中......? const int MA
我是一名优秀的程序员,十分优秀!