<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Tracking Query History and Optimizing Queries in Databricks in Community Articles</title>
    <link>https://community.databricks.com/t5/community-articles/tracking-query-history-and-optimizing-queries-in-databricks/m-p/129656#M608</link>
    <description>&lt;P class=""&gt;Optimizing queries in Databricks isn’t just about adding indexes or tweaking SQL syntax — it’s about&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;visibility&lt;/STRONG&gt;. You can’t improve what you can’t measure. Fortunately, Databricks provides rich telemetry around query history that you can use to analyze performance, identify bottlenecks, and guide tuning efforts.&lt;/P&gt;&lt;P class=""&gt;In this post, I’ll walk through how you can&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;track query history&lt;/STRONG&gt;, gather&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;key statistics&lt;/STRONG&gt;, and use them to systematically optimize workloads in Databricks.&lt;/P&gt;&lt;H1 id="bbc8"&gt;Why Track Query History?&lt;/H1&gt;&lt;P class=""&gt;Without query history, optimization is reactive: you only troubleshoot when a job is failing or a warehouse is lagging. Query history provides you with:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;Performance baselines&lt;/STRONG&gt;: Know the average runtime, rows scanned, and bytes processed.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Bottleneck detection&lt;/STRONG&gt;: Identify queries that consistently take longer or consume disproportionate resources.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Trend analysis&lt;/STRONG&gt;: Spot degradation over time as data grows.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Cost optimization&lt;/STRONG&gt;: Track which queries consume the most DBUs and storage I/O.&lt;/LI&gt;&lt;/UL&gt;&lt;H1 id="8afa"&gt;Accessing Query History in Databricks&lt;/H1&gt;&lt;P class=""&gt;Databricks exposes query history through:&lt;/P&gt;&lt;OL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;System Tables (Recommended)&lt;/STRONG&gt;&lt;BR /&gt;Databricks System Tables include&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;system.query.history&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and related views that capture query metadata, performance stats, error.&lt;/LI&gt;&lt;/OL&gt;&lt;LI-CODE lang="python"&gt;%sql
SELECT 
    statement_text,
    executed_as,
    start_time,
    total_duration_ms,
    produced_rows
FROM system.query.history
WHERE update_time &amp;gt;= CURRENT_DATE() - INTERVAL 7 DAYS
ORDER BY total_duration_ms DESC
LIMIT 10;&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;2.&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Query History API&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;For programmatic access or integration with monitoring tools, Databricks provides REST APIs to fetch query history. These are useful if you want to stream metrics into CloudWatch, Datadog etc.&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;import requests
import json

workspace_url = ""
pat = ""

uri = f"https://{workspace_url}/api/2.0/sql/history/queries"
headers = {"Authorization": f"Bearer {pat}"}

# Example filter for queries finished within a specific time range
request_body = {
    "filter_by": {
        # "query_start_time_range": {
        #     "start_time_ms": 11755751878, # Example timestamp (milliseconds)
        #     "end_time_ms": 11755834678
        # },
        "statuses": ["FINISHED","FAILED"]
    },
    "max_results": 100
}

response = requests.get(uri, headers=headers, data=json.dumps(request_body))

if response.status_code == 200:
    query_history = response.json()
    # Process the query_history data
    print(json.dumps(query_history, indent=4))
else:
    #print(f"Error: {response.status_code} - {response.text}")
    print("error")&lt;/LI-CODE&gt;&lt;H1 id="3007"&gt;Programmatic Analysis with System Tables&lt;/H1&gt;&lt;P class=""&gt;For scalable insights, query the system.query_history table in Unity Catalog, which logs metrics for SQL warehouse and serverless queries.&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
SELECT statement_id, statement_text, total_duration_ms
FROM system.query.history
WHERE execution_status = 'FINISHED'
ORDER BY total_duration_ms DESC
LIMIT 10;

-- Average query duration by user
SELECT executed_by, AVG(total_duration_ms) AS avg_duration_ms
FROM system.query.history
GROUP BY executed_by
ORDER BY avg_duration_ms DESC;

-- Queries with high disk spill
SELECT statement_id, statement_text, spilled_local_bytes
FROM system.query.history
WHERE spilled_local_bytes &amp;gt; 1000000000  -- Over 1GB
ORDER BY spilled_local_bytes DESC
LIMIT 5;&lt;/LI-CODE&gt;&lt;H1 id="4c39"&gt;Optimizing Queries with Table Statistics&lt;/H1&gt;&lt;P class=""&gt;Databricks’ cost-based optimizer (CBO) uses table statistics to select efficient execution plans, especially for joins. Collect stats with:&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
ANALYZE TABLE your_table COMPUTE STATISTICS FOR ALL COLUMNS;&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;For Unity Catalog Delta tables, enable predictive optimization to automate stats collection. Verify with:&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
EXPLAIN SELECT * FROM your_table;&lt;/LI-CODE&gt;&lt;H1 id="7a32"&gt;Improving Data Layout with OPTIMIZE and Liquid Clustering&lt;/H1&gt;&lt;P class=""&gt;Delta Lake’s OPTIMIZE command compacts small files and enhances data skipping for faster queries:&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
OPTIMIZE your_delta_table
WHERE date_partition = '2025-08-20'
ZORDER BY (column1, column2);&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;This clusters data by column1 and column2, improving filters and joins. For full-table optimization (Databricks Runtime 16.0+):&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
OPTIMIZE your_delta_table FULL;&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;Set max file size:&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;spark.conf.set("spark.databricks.delta.optimize.maxFileSize", 104857600)  # 100MB&lt;/LI-CODE&gt;&lt;H1 id="d98b"&gt;Introducing Liquid Clustering&lt;/H1&gt;&lt;P class=""&gt;Liquid clustering, a powerful Delta Lake feature, offers a flexible alternative to traditional partitioning and Z-ordering. Unlike static partitions, liquid clustering dynamically organizes data based on clustering columns, adapting to changing query patterns without requiring rewrites. It’s ideal for high-cardinality columns or evolving workloads.&lt;/P&gt;&lt;P class=""&gt;To enable liquid clustering when creating a table:&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
CREATE TABLE your_delta_table (
  id BIGINT,
  event_type STRING,
  event_date DATE
)
USING DELTA
CLUSTER BY (event_type, event_date);&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;For existing tables, enable liquid clustering (note: this is a one-way operation):&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
ALTER TABLE your_delta_table CLUSTER BY (event_type, event_date);&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;Run OPTIMIZE to apply clustering:&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
OPTIMIZE your_delta_table;&lt;/LI-CODE&gt;&lt;P class=""&gt;&lt;STRONG&gt;Benefits of Liquid Clustering&lt;/STRONG&gt;:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;Dynamic Adaptation&lt;/STRONG&gt;: Adjusts data layout as query patterns change, unlike Z-ordering’s static approach.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Improved Data Skipping&lt;/STRONG&gt;: Enhances pruning for queries filtering on clustering columns.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Simplified Management&lt;/STRONG&gt;: Eliminates partition maintenance for high-cardinality columns.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;&lt;STRONG&gt;Use Case&lt;/STRONG&gt;: If queries frequently filter on event_type and event_date, liquid clustering ensures efficient data access without manual partition tuning. Check query profiles to confirm reduced rows scanned after enabling.&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;Best Practices&lt;/STRONG&gt;:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Choose up to four clustering columns based on common filters or joins.&lt;/LI&gt;&lt;LI&gt;Run OPTIMIZE periodically or enable predictive optimization for auto-maintenance.&lt;/LI&gt;&lt;LI&gt;Use DESCRIBE DETAIL your_delta_table to verify clustering columns.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;Liquid clustering shines in scenarios with dynamic workloads, complementing OPTIMIZE for maximum performance.&lt;/P&gt;&lt;H1 id="01f7"&gt;Building Dashboards for Query Monitoring&lt;/H1&gt;&lt;P class=""&gt;Instead of running ad-hoc checks, consider creating a&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Lakehouse monitoring dashboard&lt;/STRONG&gt;:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;Top N slowest queries&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;by runtime.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Top N most expensive queries&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;by DBU cost or bytes scanned.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Query trends&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;(average runtime per user/team).&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Failure heatmap&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;(when and how often queries fail).&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;You can build this dashboard in Databricks SQL (Lakeview) or forward metrics to BI tools like Tableau, Power BI, or monitoring systems like Datadog.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 25 Aug 2025 19:39:20 GMT</pubDate>
    <dc:creator>nayan_wylde</dc:creator>
    <dc:date>2025-08-25T19:39:20Z</dc:date>
    <item>
      <title>Tracking Query History and Optimizing Queries in Databricks</title>
      <link>https://community.databricks.com/t5/community-articles/tracking-query-history-and-optimizing-queries-in-databricks/m-p/129656#M608</link>
      <description>&lt;P class=""&gt;Optimizing queries in Databricks isn’t just about adding indexes or tweaking SQL syntax — it’s about&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;visibility&lt;/STRONG&gt;. You can’t improve what you can’t measure. Fortunately, Databricks provides rich telemetry around query history that you can use to analyze performance, identify bottlenecks, and guide tuning efforts.&lt;/P&gt;&lt;P class=""&gt;In this post, I’ll walk through how you can&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;track query history&lt;/STRONG&gt;, gather&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;key statistics&lt;/STRONG&gt;, and use them to systematically optimize workloads in Databricks.&lt;/P&gt;&lt;H1 id="bbc8"&gt;Why Track Query History?&lt;/H1&gt;&lt;P class=""&gt;Without query history, optimization is reactive: you only troubleshoot when a job is failing or a warehouse is lagging. Query history provides you with:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;Performance baselines&lt;/STRONG&gt;: Know the average runtime, rows scanned, and bytes processed.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Bottleneck detection&lt;/STRONG&gt;: Identify queries that consistently take longer or consume disproportionate resources.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Trend analysis&lt;/STRONG&gt;: Spot degradation over time as data grows.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Cost optimization&lt;/STRONG&gt;: Track which queries consume the most DBUs and storage I/O.&lt;/LI&gt;&lt;/UL&gt;&lt;H1 id="8afa"&gt;Accessing Query History in Databricks&lt;/H1&gt;&lt;P class=""&gt;Databricks exposes query history through:&lt;/P&gt;&lt;OL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;System Tables (Recommended)&lt;/STRONG&gt;&lt;BR /&gt;Databricks System Tables include&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;system.query.history&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;and related views that capture query metadata, performance stats, error.&lt;/LI&gt;&lt;/OL&gt;&lt;LI-CODE lang="python"&gt;%sql
SELECT 
    statement_text,
    executed_as,
    start_time,
    total_duration_ms,
    produced_rows
FROM system.query.history
WHERE update_time &amp;gt;= CURRENT_DATE() - INTERVAL 7 DAYS
ORDER BY total_duration_ms DESC
LIMIT 10;&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;2.&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Query History API&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;For programmatic access or integration with monitoring tools, Databricks provides REST APIs to fetch query history. These are useful if you want to stream metrics into CloudWatch, Datadog etc.&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;import requests
import json

workspace_url = ""
pat = ""

uri = f"https://{workspace_url}/api/2.0/sql/history/queries"
headers = {"Authorization": f"Bearer {pat}"}

# Example filter for queries finished within a specific time range
request_body = {
    "filter_by": {
        # "query_start_time_range": {
        #     "start_time_ms": 11755751878, # Example timestamp (milliseconds)
        #     "end_time_ms": 11755834678
        # },
        "statuses": ["FINISHED","FAILED"]
    },
    "max_results": 100
}

response = requests.get(uri, headers=headers, data=json.dumps(request_body))

if response.status_code == 200:
    query_history = response.json()
    # Process the query_history data
    print(json.dumps(query_history, indent=4))
else:
    #print(f"Error: {response.status_code} - {response.text}")
    print("error")&lt;/LI-CODE&gt;&lt;H1 id="3007"&gt;Programmatic Analysis with System Tables&lt;/H1&gt;&lt;P class=""&gt;For scalable insights, query the system.query_history table in Unity Catalog, which logs metrics for SQL warehouse and serverless queries.&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
SELECT statement_id, statement_text, total_duration_ms
FROM system.query.history
WHERE execution_status = 'FINISHED'
ORDER BY total_duration_ms DESC
LIMIT 10;

-- Average query duration by user
SELECT executed_by, AVG(total_duration_ms) AS avg_duration_ms
FROM system.query.history
GROUP BY executed_by
ORDER BY avg_duration_ms DESC;

-- Queries with high disk spill
SELECT statement_id, statement_text, spilled_local_bytes
FROM system.query.history
WHERE spilled_local_bytes &amp;gt; 1000000000  -- Over 1GB
ORDER BY spilled_local_bytes DESC
LIMIT 5;&lt;/LI-CODE&gt;&lt;H1 id="4c39"&gt;Optimizing Queries with Table Statistics&lt;/H1&gt;&lt;P class=""&gt;Databricks’ cost-based optimizer (CBO) uses table statistics to select efficient execution plans, especially for joins. Collect stats with:&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
ANALYZE TABLE your_table COMPUTE STATISTICS FOR ALL COLUMNS;&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;For Unity Catalog Delta tables, enable predictive optimization to automate stats collection. Verify with:&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
EXPLAIN SELECT * FROM your_table;&lt;/LI-CODE&gt;&lt;H1 id="7a32"&gt;Improving Data Layout with OPTIMIZE and Liquid Clustering&lt;/H1&gt;&lt;P class=""&gt;Delta Lake’s OPTIMIZE command compacts small files and enhances data skipping for faster queries:&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
OPTIMIZE your_delta_table
WHERE date_partition = '2025-08-20'
ZORDER BY (column1, column2);&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;This clusters data by column1 and column2, improving filters and joins. For full-table optimization (Databricks Runtime 16.0+):&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
OPTIMIZE your_delta_table FULL;&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;Set max file size:&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;spark.conf.set("spark.databricks.delta.optimize.maxFileSize", 104857600)  # 100MB&lt;/LI-CODE&gt;&lt;H1 id="d98b"&gt;Introducing Liquid Clustering&lt;/H1&gt;&lt;P class=""&gt;Liquid clustering, a powerful Delta Lake feature, offers a flexible alternative to traditional partitioning and Z-ordering. Unlike static partitions, liquid clustering dynamically organizes data based on clustering columns, adapting to changing query patterns without requiring rewrites. It’s ideal for high-cardinality columns or evolving workloads.&lt;/P&gt;&lt;P class=""&gt;To enable liquid clustering when creating a table:&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
CREATE TABLE your_delta_table (
  id BIGINT,
  event_type STRING,
  event_date DATE
)
USING DELTA
CLUSTER BY (event_type, event_date);&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;For existing tables, enable liquid clustering (note: this is a one-way operation):&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
ALTER TABLE your_delta_table CLUSTER BY (event_type, event_date);&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;Run OPTIMIZE to apply clustering:&lt;/SPAN&gt;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;%sql
OPTIMIZE your_delta_table;&lt;/LI-CODE&gt;&lt;P class=""&gt;&lt;STRONG&gt;Benefits of Liquid Clustering&lt;/STRONG&gt;:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;Dynamic Adaptation&lt;/STRONG&gt;: Adjusts data layout as query patterns change, unlike Z-ordering’s static approach.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Improved Data Skipping&lt;/STRONG&gt;: Enhances pruning for queries filtering on clustering columns.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Simplified Management&lt;/STRONG&gt;: Eliminates partition maintenance for high-cardinality columns.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;&lt;STRONG&gt;Use Case&lt;/STRONG&gt;: If queries frequently filter on event_type and event_date, liquid clustering ensures efficient data access without manual partition tuning. Check query profiles to confirm reduced rows scanned after enabling.&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;Best Practices&lt;/STRONG&gt;:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Choose up to four clustering columns based on common filters or joins.&lt;/LI&gt;&lt;LI&gt;Run OPTIMIZE periodically or enable predictive optimization for auto-maintenance.&lt;/LI&gt;&lt;LI&gt;Use DESCRIBE DETAIL your_delta_table to verify clustering columns.&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;Liquid clustering shines in scenarios with dynamic workloads, complementing OPTIMIZE for maximum performance.&lt;/P&gt;&lt;H1 id="01f7"&gt;Building Dashboards for Query Monitoring&lt;/H1&gt;&lt;P class=""&gt;Instead of running ad-hoc checks, consider creating a&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Lakehouse monitoring dashboard&lt;/STRONG&gt;:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;Top N slowest queries&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;by runtime.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Top N most expensive queries&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;by DBU cost or bytes scanned.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Query trends&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;(average runtime per user/team).&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Failure heatmap&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;(when and how often queries fail).&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;You can build this dashboard in Databricks SQL (Lakeview) or forward metrics to BI tools like Tableau, Power BI, or monitoring systems like Datadog.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 25 Aug 2025 19:39:20 GMT</pubDate>
      <guid>https://community.databricks.com/t5/community-articles/tracking-query-history-and-optimizing-queries-in-databricks/m-p/129656#M608</guid>
      <dc:creator>nayan_wylde</dc:creator>
      <dc:date>2025-08-25T19:39:20Z</dc:date>
    </item>
  </channel>
</rss>

