The aws:quicksight/refreshSchedule:RefreshSchedule resource, part of the Pulumi AWS provider, defines when and how QuickSight datasets reload data from their sources. This guide focuses on three capabilities: hourly, weekly, and monthly refresh intervals, full vs incremental refresh types, and timezone and day-of-week/month scheduling.
Refresh schedules depend on existing QuickSight datasets. Incremental refreshes require datasets with ingestion time columns that track when records were added. The examples are intentionally small. Combine them with your own dataset configurations and data source connections.
Schedule hourly full refreshes
Hourly schedules provide near-real-time visibility for dashboards tracking operational metrics.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.quicksight.RefreshSchedule("example", {
dataSetId: "dataset-id",
scheduleId: "schedule-id",
schedule: {
refreshType: "FULL_REFRESH",
scheduleFrequency: {
interval: "HOURLY",
},
},
});
import pulumi
import pulumi_aws as aws
example = aws.quicksight.RefreshSchedule("example",
data_set_id="dataset-id",
schedule_id="schedule-id",
schedule={
"refresh_type": "FULL_REFRESH",
"schedule_frequency": {
"interval": "HOURLY",
},
})
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/quicksight"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := quicksight.NewRefreshSchedule(ctx, "example", &quicksight.RefreshScheduleArgs{
DataSetId: pulumi.String("dataset-id"),
ScheduleId: pulumi.String("schedule-id"),
Schedule: &quicksight.RefreshScheduleScheduleArgs{
RefreshType: pulumi.String("FULL_REFRESH"),
ScheduleFrequency: &quicksight.RefreshScheduleScheduleScheduleFrequencyArgs{
Interval: pulumi.String("HOURLY"),
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Quicksight.RefreshSchedule("example", new()
{
DataSetId = "dataset-id",
ScheduleId = "schedule-id",
Schedule = new Aws.Quicksight.Inputs.RefreshScheduleScheduleArgs
{
RefreshType = "FULL_REFRESH",
ScheduleFrequency = new Aws.Quicksight.Inputs.RefreshScheduleScheduleScheduleFrequencyArgs
{
Interval = "HOURLY",
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.quicksight.RefreshSchedule;
import com.pulumi.aws.quicksight.RefreshScheduleArgs;
import com.pulumi.aws.quicksight.inputs.RefreshScheduleScheduleArgs;
import com.pulumi.aws.quicksight.inputs.RefreshScheduleScheduleScheduleFrequencyArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new RefreshSchedule("example", RefreshScheduleArgs.builder()
.dataSetId("dataset-id")
.scheduleId("schedule-id")
.schedule(RefreshScheduleScheduleArgs.builder()
.refreshType("FULL_REFRESH")
.scheduleFrequency(RefreshScheduleScheduleScheduleFrequencyArgs.builder()
.interval("HOURLY")
.build())
.build())
.build());
}
}
resources:
example:
type: aws:quicksight:RefreshSchedule
properties:
dataSetId: dataset-id
scheduleId: schedule-id
schedule:
refreshType: FULL_REFRESH
scheduleFrequency:
interval: HOURLY
The refreshType property controls whether QuickSight reloads all data (FULL_REFRESH) or only new records (INCREMENTAL_REFRESH). The interval property sets the cadence; HOURLY runs at the top of each hour. The dataSetId and scheduleId uniquely identify which dataset to refresh and which schedule configuration to use.
Schedule weekly incremental refreshes
Datasets that accumulate new records can use incremental refreshes to load only changed data, reducing processing time.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.quicksight.RefreshSchedule("example", {
dataSetId: "dataset-id",
scheduleId: "schedule-id",
schedule: {
refreshType: "INCREMENTAL_REFRESH",
scheduleFrequency: {
interval: "WEEKLY",
timeOfTheDay: "01:00",
timezone: "Europe/London",
refreshOnDay: {
dayOfWeek: "MONDAY",
},
},
},
});
import pulumi
import pulumi_aws as aws
example = aws.quicksight.RefreshSchedule("example",
data_set_id="dataset-id",
schedule_id="schedule-id",
schedule={
"refresh_type": "INCREMENTAL_REFRESH",
"schedule_frequency": {
"interval": "WEEKLY",
"time_of_the_day": "01:00",
"timezone": "Europe/London",
"refresh_on_day": {
"day_of_week": "MONDAY",
},
},
})
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/quicksight"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := quicksight.NewRefreshSchedule(ctx, "example", &quicksight.RefreshScheduleArgs{
DataSetId: pulumi.String("dataset-id"),
ScheduleId: pulumi.String("schedule-id"),
Schedule: &quicksight.RefreshScheduleScheduleArgs{
RefreshType: pulumi.String("INCREMENTAL_REFRESH"),
ScheduleFrequency: &quicksight.RefreshScheduleScheduleScheduleFrequencyArgs{
Interval: pulumi.String("WEEKLY"),
TimeOfTheDay: pulumi.String("01:00"),
Timezone: pulumi.String("Europe/London"),
RefreshOnDay: &quicksight.RefreshScheduleScheduleScheduleFrequencyRefreshOnDayArgs{
DayOfWeek: pulumi.String("MONDAY"),
},
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Quicksight.RefreshSchedule("example", new()
{
DataSetId = "dataset-id",
ScheduleId = "schedule-id",
Schedule = new Aws.Quicksight.Inputs.RefreshScheduleScheduleArgs
{
RefreshType = "INCREMENTAL_REFRESH",
ScheduleFrequency = new Aws.Quicksight.Inputs.RefreshScheduleScheduleScheduleFrequencyArgs
{
Interval = "WEEKLY",
TimeOfTheDay = "01:00",
Timezone = "Europe/London",
RefreshOnDay = new Aws.Quicksight.Inputs.RefreshScheduleScheduleScheduleFrequencyRefreshOnDayArgs
{
DayOfWeek = "MONDAY",
},
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.quicksight.RefreshSchedule;
import com.pulumi.aws.quicksight.RefreshScheduleArgs;
import com.pulumi.aws.quicksight.inputs.RefreshScheduleScheduleArgs;
import com.pulumi.aws.quicksight.inputs.RefreshScheduleScheduleScheduleFrequencyArgs;
import com.pulumi.aws.quicksight.inputs.RefreshScheduleScheduleScheduleFrequencyRefreshOnDayArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new RefreshSchedule("example", RefreshScheduleArgs.builder()
.dataSetId("dataset-id")
.scheduleId("schedule-id")
.schedule(RefreshScheduleScheduleArgs.builder()
.refreshType("INCREMENTAL_REFRESH")
.scheduleFrequency(RefreshScheduleScheduleScheduleFrequencyArgs.builder()
.interval("WEEKLY")
.timeOfTheDay("01:00")
.timezone("Europe/London")
.refreshOnDay(RefreshScheduleScheduleScheduleFrequencyRefreshOnDayArgs.builder()
.dayOfWeek("MONDAY")
.build())
.build())
.build())
.build());
}
}
resources:
example:
type: aws:quicksight:RefreshSchedule
properties:
dataSetId: dataset-id
scheduleId: schedule-id
schedule:
refreshType: INCREMENTAL_REFRESH
scheduleFrequency:
interval: WEEKLY
timeOfTheDay: 01:00
timezone: Europe/London
refreshOnDay:
dayOfWeek: MONDAY
When refreshType is INCREMENTAL_REFRESH, QuickSight loads only records added since the last refresh. The timeOfTheDay property sets when the refresh runs (24-hour format), and timezone ensures it runs at the correct local time. The dayOfWeek property pins the refresh to a specific day; here, Monday at 1:00 AM London time.
Schedule monthly refreshes on specific days
Monthly reporting workflows often align refreshes with billing cycles or month-end processes.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.quicksight.RefreshSchedule("example", {
dataSetId: "dataset-id",
scheduleId: "schedule-id",
schedule: {
refreshType: "INCREMENTAL_REFRESH",
scheduleFrequency: {
interval: "MONTHLY",
timeOfTheDay: "01:00",
timezone: "Europe/London",
refreshOnDay: {
dayOfMonth: "1",
},
},
},
});
import pulumi
import pulumi_aws as aws
example = aws.quicksight.RefreshSchedule("example",
data_set_id="dataset-id",
schedule_id="schedule-id",
schedule={
"refresh_type": "INCREMENTAL_REFRESH",
"schedule_frequency": {
"interval": "MONTHLY",
"time_of_the_day": "01:00",
"timezone": "Europe/London",
"refresh_on_day": {
"day_of_month": "1",
},
},
})
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/quicksight"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := quicksight.NewRefreshSchedule(ctx, "example", &quicksight.RefreshScheduleArgs{
DataSetId: pulumi.String("dataset-id"),
ScheduleId: pulumi.String("schedule-id"),
Schedule: &quicksight.RefreshScheduleScheduleArgs{
RefreshType: pulumi.String("INCREMENTAL_REFRESH"),
ScheduleFrequency: &quicksight.RefreshScheduleScheduleScheduleFrequencyArgs{
Interval: pulumi.String("MONTHLY"),
TimeOfTheDay: pulumi.String("01:00"),
Timezone: pulumi.String("Europe/London"),
RefreshOnDay: &quicksight.RefreshScheduleScheduleScheduleFrequencyRefreshOnDayArgs{
DayOfMonth: pulumi.String("1"),
},
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Quicksight.RefreshSchedule("example", new()
{
DataSetId = "dataset-id",
ScheduleId = "schedule-id",
Schedule = new Aws.Quicksight.Inputs.RefreshScheduleScheduleArgs
{
RefreshType = "INCREMENTAL_REFRESH",
ScheduleFrequency = new Aws.Quicksight.Inputs.RefreshScheduleScheduleScheduleFrequencyArgs
{
Interval = "MONTHLY",
TimeOfTheDay = "01:00",
Timezone = "Europe/London",
RefreshOnDay = new Aws.Quicksight.Inputs.RefreshScheduleScheduleScheduleFrequencyRefreshOnDayArgs
{
DayOfMonth = "1",
},
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.quicksight.RefreshSchedule;
import com.pulumi.aws.quicksight.RefreshScheduleArgs;
import com.pulumi.aws.quicksight.inputs.RefreshScheduleScheduleArgs;
import com.pulumi.aws.quicksight.inputs.RefreshScheduleScheduleScheduleFrequencyArgs;
import com.pulumi.aws.quicksight.inputs.RefreshScheduleScheduleScheduleFrequencyRefreshOnDayArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new RefreshSchedule("example", RefreshScheduleArgs.builder()
.dataSetId("dataset-id")
.scheduleId("schedule-id")
.schedule(RefreshScheduleScheduleArgs.builder()
.refreshType("INCREMENTAL_REFRESH")
.scheduleFrequency(RefreshScheduleScheduleScheduleFrequencyArgs.builder()
.interval("MONTHLY")
.timeOfTheDay("01:00")
.timezone("Europe/London")
.refreshOnDay(RefreshScheduleScheduleScheduleFrequencyRefreshOnDayArgs.builder()
.dayOfMonth("1")
.build())
.build())
.build())
.build());
}
}
resources:
example:
type: aws:quicksight:RefreshSchedule
properties:
dataSetId: dataset-id
scheduleId: schedule-id
schedule:
refreshType: INCREMENTAL_REFRESH
scheduleFrequency:
interval: MONTHLY
timeOfTheDay: 01:00
timezone: Europe/London
refreshOnDay:
dayOfMonth: '1'
The dayOfMonth property replaces dayOfWeek for monthly schedules, running the refresh on a specific calendar day. Here, the dataset refreshes on the first day of each month at 1:00 AM London time. Monthly schedules still require timeOfTheDay and timezone configuration.
Beyond these examples
These snippets focus on specific refresh schedule features: refresh intervals (hourly, weekly, monthly), full vs incremental refresh types, and timezone and time-of-day scheduling. They’re intentionally minimal rather than complete data pipeline configurations.
The examples reference pre-existing infrastructure such as QuickSight datasets with defined schemas, and for incremental refresh, datasets with ingestion time columns. They focus on configuring the schedule rather than provisioning datasets or data sources.
To keep things focused, common refresh patterns are omitted, including:
- Daily refresh schedules (interval: DAILY)
- Start date configuration for schedule activation
- Multiple schedules per dataset
- Error handling and retry configuration
These omissions are intentional: the goal is to illustrate how each refresh schedule feature is wired, not provide drop-in analytics modules. See the QuickSight RefreshSchedule resource reference for all available configuration options.
Let's configure AWS QuickSight Refresh Schedules
Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.
Try Pulumi Cloud for FREEFrequently Asked Questions
Refresh Types & Intervals
FULL_REFRESH to reload all data or INCREMENTAL_REFRESH to update only changed data.HOURLY, WEEKLY, and MONTHLY refresh intervals.Schedule Configuration
timeOfTheDay and timezone. Weekly schedules use refreshOnDay.dayOfWeek (e.g., “MONDAY”), while monthly schedules use refreshOnDay.dayOfMonth (e.g., “1”).interval: "HOURLY" without timeOfTheDay or timezone fields.Import & Management
account-id,dataset-id,schedule-id with comma separators (e.g., 123456789012,dataset-id,schedule-id).Using a different cloud?
Explore analytics guides for other cloud providers: