mirror of
https://github.com/getredash/redash.git
synced 2025-12-19 17:37:19 -05:00
BigQuery: Add table description on Schema Browser (#7543)
This commit is contained in:
@@ -47,13 +47,22 @@ function SchemaItem({ item, expanded, onToggle, onSelect, ...props }) {
|
||||
return (
|
||||
<div {...props}>
|
||||
<div className="schema-list-item">
|
||||
<PlainButton className="table-name" onClick={onToggle}>
|
||||
<i className="fa fa-table m-r-5" aria-hidden="true" />
|
||||
<strong>
|
||||
<span title={item.name}>{tableDisplayName}</span>
|
||||
{!isNil(item.size) && <span> ({item.size})</span>}
|
||||
</strong>
|
||||
</PlainButton>
|
||||
<Tooltip
|
||||
title={item.description}
|
||||
mouseEnterDelay={0}
|
||||
mouseLeaveDelay={0}
|
||||
placement="rightTop"
|
||||
trigger={item.description ? "hover" : ""}
|
||||
overlayStyle={{ whiteSpace: "pre-line" }}
|
||||
>
|
||||
<PlainButton className="table-name" onClick={onToggle}>
|
||||
<i className="fa fa-table m-r-5" aria-hidden="true" />
|
||||
<strong>
|
||||
<span title={item.name}>{tableDisplayName}</span>
|
||||
{!isNil(item.size) && <span> ({item.size})</span>}
|
||||
</strong>
|
||||
</PlainButton>
|
||||
</Tooltip>
|
||||
<Tooltip
|
||||
title="Insert table name into query text"
|
||||
mouseEnterDelay={0}
|
||||
|
||||
@@ -228,7 +228,7 @@ class DataSource(BelongsToOrgMixin, db.Model):
|
||||
|
||||
def _sort_schema(self, schema):
|
||||
return [
|
||||
{"name": i["name"], "columns": sorted(i["columns"], key=lambda x: x["name"] if isinstance(x, dict) else x)}
|
||||
{**i, "columns": sorted(i["columns"], key=lambda x: x["name"] if isinstance(x, dict) else x)}
|
||||
for i in sorted(schema, key=lambda x: x["name"])
|
||||
]
|
||||
|
||||
|
||||
@@ -313,6 +313,13 @@ class BigQuery(BaseSQLQueryRunner):
|
||||
WHERE table_schema NOT IN ('information_schema')
|
||||
"""
|
||||
|
||||
table_query_base = """
|
||||
SELECT table_schema, table_name, JSON_VALUE(option_value) as table_description
|
||||
FROM `{dataset_id}`.INFORMATION_SCHEMA.TABLE_OPTIONS
|
||||
WHERE table_schema NOT IN ('information_schema')
|
||||
AND option_name = 'description'
|
||||
"""
|
||||
|
||||
location_dataset_ids = {}
|
||||
schema = {}
|
||||
for dataset in datasets:
|
||||
@@ -349,6 +356,23 @@ class BigQuery(BaseSQLQueryRunner):
|
||||
}
|
||||
)
|
||||
|
||||
table_queries = []
|
||||
for dataset_id in datasets:
|
||||
table_query = table_query_base.format(dataset_id=dataset_id)
|
||||
table_queries.append(table_query)
|
||||
|
||||
table_query = "\nUNION ALL\n".join(table_queries)
|
||||
results, error = self.run_query(table_query, None)
|
||||
if error is not None:
|
||||
self._handle_run_query_error(error)
|
||||
|
||||
for row in results["rows"]:
|
||||
table_name = "{0}.{1}".format(row["table_schema"], row["table_name"])
|
||||
if table_name not in schema:
|
||||
schema[table_name] = {"name": table_name, "columns": []}
|
||||
if "table_description" in row:
|
||||
schema[table_name]["description"] = row["table_description"]
|
||||
|
||||
return list(schema.values())
|
||||
|
||||
def run_query(self, query, user):
|
||||
|
||||
Reference in New Issue
Block a user