Skip to content

Commit

Permalink
Feature (Redshift): option to set query group for adhoc/scheduled que…
Browse files Browse the repository at this point in the history
…ries (#4114)

* Add scheduled status to query job metadata.

* Add: option to set query group for adhoc/scheduled Redshift queries

* Scheduled might not be set for already enqueued queries.
  • Loading branch information
arikfr authored Sep 2, 2019
1 parent f82dedb commit dd36e35
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
28 changes: 26 additions & 2 deletions redash/query_runner/pg.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,12 +266,36 @@ def configuration_schema(cls):
"type": "string",
"title": "SSL Mode",
"default": "prefer"
}
},
"adhoc_query_group": {
"type": "string",
"title": "Query Group for Adhoc Queries",
"default": "default"
},
"scheduled_query_group": {
"type": "string",
"title": "Query Group for Scheduled Queries",
"default": "default"
},
},
"order": ['host', 'port', 'user', 'password'],
"order": ['host', 'port', 'user', 'password', 'dbname', 'sslmode', 'adhoc_query_group', 'scheduled_query_group'],
"required": ["dbname", "user", "password", "host", "port"],
"secret": ["password"]
}

def annotate_query(self, query, metadata):
annotated = super(Redshift, self).annotate_query(query, metadata)

if metadata.get('Scheduled', False):
query_group = self.configuration.get('scheduled_query_group')
else:
query_group = self.configuration.get('adhoc_query_group')

if query_group:
set_query_group = 'set query_group to {};'.format(query_group)
annotated = '{}\n{}'.format(set_query_group, annotated)

return annotated

def _get_tables(self, schema):
# Use svv_columns to include internal & external (Spectrum) tables and views data for Redshift
Expand Down
2 changes: 2 additions & 0 deletions redash/tasks/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,8 @@ def _annotate_query(self, query_runner):
self.metadata['Task ID'] = self.task.request.id
self.metadata['Query Hash'] = self.query_hash
self.metadata['Queue'] = self.task.request.delivery_info['routing_key']
self.metadata['Scheduled'] = self.scheduled_query is not None

return query_runner.annotate_query(self.query, self.metadata)

def _log_progress(self, state):
Expand Down

0 comments on commit dd36e35

Please sign in to comment.