fix: correctly select materialized view and resolution (#4294)

This commit is contained in:
Laurin Quast 2024-03-25 10:27:11 +01:00 committed by GitHub
parent fcf4fe03de
commit c6cfc50dcf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 29 deletions

View file

@ -133,13 +133,22 @@ export class OperationsReader {
minutely: subMinutes(startOfMinute(subHours(now, tableTTLInHours.minutely)), 2),
};
const daysDifference = (period.to.getTime() - period.from.getTime()) / msDay;
if (
daysDifference > thresholdDataPointPerDay ||
/** if we are outside this range, we always need to get daily data */
period.to.getTime() <= tableOldestDateTimePoint.daily.getTime() ||
period.from.getTime() <= tableOldestDateTimePoint.daily.getTime()
) {
this.logger.error(
`Requested date range ${formatDate(period.from)} - ${formatDate(period.to)} is too old.`,
);
throw new Error(`The requested date range is too old for the selected query type.`);
}
const daysDifference = Math.floor((period.to.getTime() - period.from.getTime()) / msDay);
if (
daysDifference >= thresholdDataPointPerDay ||
period.to.getTime() <= tableOldestDateTimePoint.hourly.getTime() ||
period.from.getTime() <= tableOldestDateTimePoint.hourly.getTime()
) {
return {
...queryMap['daily'],
@ -150,10 +159,9 @@ export class OperationsReader {
const hoursDifference = (period.to.getTime() - period.from.getTime()) / msHour;
if (
hoursDifference > thresholdDataPointPerHour ||
/** if we are outside this range, we always need to get hourly data */
period.to.getTime() <= tableOldestDateTimePoint.hourly.getTime() ||
period.from.getTime() <= tableOldestDateTimePoint.hourly.getTime()
hoursDifference >= thresholdDataPointPerHour &&
period.to.getTime() <= tableOldestDateTimePoint.minutely.getTime() &&
period.from.getTime() <= tableOldestDateTimePoint.minutely.getTime()
) {
return {
...queryMap['hourly'],
@ -161,16 +169,6 @@ export class OperationsReader {
};
}
if (
period.to.getTime() <= tableOldestDateTimePoint.minutely.getTime() ||
period.from.getTime() <= tableOldestDateTimePoint.minutely.getTime()
) {
this.logger.error(
`Requested date range ${formatDate(period.from)} - ${formatDate(period.to)} is too old.`,
);
throw new Error(`The requested date range is too old for the selected query type.`);
}
return {
...queryMap['minutely'],
queryType: 'minutely',

View file

@ -123,13 +123,20 @@ function resolveRangeAndResolution(range: { from: Date; to: Date }) {
minutely: startOfMinute(subHours(now, tableTTLInHours.minutely)),
};
if (
range.to.getTime() <= tableOldestDateTimePoint.daily.getTime() ||
range.from.getTime() <= tableOldestDateTimePoint.daily.getTime()
) {
throw new Error('This range can never be resolved.');
}
const daysDifference = (range.to.getTime() - range.from.getTime()) / msDay;
if (
daysDifference > thresholdDataPointPerDay ||
/** if we are outside this range, we always need to get daily data */
range.to.getTime() <= tableOldestDateTimePoint.daily.getTime() ||
range.from.getTime() <= tableOldestDateTimePoint.daily.getTime()
range.to.getTime() <= tableOldestDateTimePoint.hourly.getTime() ||
range.from.getTime() <= tableOldestDateTimePoint.hourly.getTime()
) {
const resolvedRange = {
from: getUTCStartOfDay(range.from),
@ -151,8 +158,8 @@ function resolveRangeAndResolution(range: { from: Date; to: Date }) {
if (
hoursDifference > thresholdDataPointPerHour ||
/** if we are outside this range, we always need to get hourly data */
range.to.getTime() <= tableOldestDateTimePoint.hourly.getTime() ||
range.from.getTime() <= tableOldestDateTimePoint.hourly.getTime()
range.to.getTime() <= tableOldestDateTimePoint.minutely.getTime() ||
range.from.getTime() <= tableOldestDateTimePoint.minutely.getTime()
) {
const resolvedRange = {
from: startOfHour(range.from),
@ -169,13 +176,6 @@ function resolveRangeAndResolution(range: { from: Date; to: Date }) {
};
}
if (
range.to.getTime() <= tableOldestDateTimePoint.minutely.getTime() ||
range.from.getTime() <= tableOldestDateTimePoint.minutely.getTime()
) {
throw new Error('This range can never be resolved.');
}
const resolvedRange = {
from: startOfMinute(range.from),
to: subSeconds(startOfMinute(range.to), 1),