Abfrageoptimierung in Snowflake

Einführung in Snowflake SQL

George Boorman

Senior Curriculum Manager, DataCamp

Warum sollte man Abfragen in Snowflake optimieren?

  • Schnellere Ergebnisse erzielen
  • Kosteneffizienz
    • Kürzere Abfragezeiten verbrauchen weniger Ressourcen wie CPU und Speicher.

Bild, das zeigt, wie viel CPU und Speicher verbraucht werden, was zu Geld kostet

Einführung in Snowflake SQL

Häufige Probleme bei der Abfrage

  • Explodierende Verbindungen: Sei vorsichtig!

Falsch

SELECT *
FROM order_details AS od
JOIN pizzas AS p -- Missing ON condition leading to exploding joins

Abfrageergebnisse Zeilen und Zeitangaben ohne Bedingung „ ON “

Einführung in Snowflake SQL

Häufige Probleme bei der Abfrage

  • Explodierende Verbindungen: Sei vorsichtig!

Richtig

SELECT *
FROM order_details AS od
JOIN pizzas AS p
ON od.pizza_id = p.pizza_id

Abfrageergebnisse und Zeitangaben mit der Bedingung „ ON

Einführung in Snowflake SQL

Häufige Probleme bei der Abfrage

  • UNION UNION ALL oder ? Den Unterschied kennen
    • UNION entfernt Duplikate, verlangsamt die Abfrage
    • UNION ALL ist schneller, wenn es keine Duplikate gibt
  • Umgang mit großen Datenmengen
    • Benutze Filter, um die Daten einzugrenzen.
    • Setz Grenzen, um schneller Ergebnisse zu kriegen
Einführung in Snowflake SQL

Wie kann man Abfragen optimieren?

SELECT * ⌛

SELECT
    *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Details zur Abfrage, Zeit und Zeilen

SELECT LIMIT 10* ⚡

SELECT *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS
LIMIT 10

Frag nach Details, Zeit und Zeilen mit LIMIT 10

Einführung in Snowflake SQL

Wie kann man Abfragen optimieren?

SELECT * -Nutzung ⌛

SELECT 
    *
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Details zur Abfrage, Zeit und Zeilen

Vermeide „ SELECT * “ ⚡

SELECT o_orderdate, 
    o_orderstatus 
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF100.ORDERS

Frag nach Details, Zeit und Zeilen mit den Spaltennamen auswählen

Einführung in Snowflake SQL

Wie kann man Abfragen optimieren?

Frühzeitig filtern

  • Benutze die „ WHERE “-Klausel frühzeitig
  • Füge Filter vor „ JOINs“ hinzu.
    • JOIN weniger Zeilen verarbeiten
Einführung in Snowflake SQL

Ohne frühzeitige Filterung

SELECT orders.order_id, 
       orders.order_date, 
       pizza_type.name, 
       pizzas.pizza_size
FROM orders
JOIN order_details 
ON orders.order_id = order_details.order_id
JOIN pizzas 
ON order_details.pizza_id = pizzas.pizza_id
JOIN pizza_type 
ON pizzas.pizza_type_id = pizza_type.pizza_type_id
WHERE orders.order_date = '2015-01-01';  -- Filtering after JOIN
Einführung in Snowflake SQL

Mit frühzeitiger Filterung

WITH filtered_orders AS (
  SELECT *
  FROM orders
  WHERE order_date = '2015-01-01'  -- Filtering in CTE before JOIN
)
SELECT filtered_orders.order_id, 
       filtered_orders.order_date, 
       pizza_type.name, 
       pizzas.pizza_size
FROM filtered_orders -- Joining with CTE
JOIN order_details
ON filtered_orders.order_id = order_details.order_id
JOIN pizzas
ON order_details.pizza_id = pizzas.pizza_id
JOIN pizza_type
ON pizzas.pizza_type_id = pizza_type.pizza_type_id;
Einführung in Snowflake SQL

Abfrageverlauf

  • Abfrageverlauf
    • snowflake.account_usage.query_history
    • Der Abfrageverlauf zeigt verschiedene Metriken wie die Ausführungszeit an.
SELECT query_text, start_time, end_time, execution_time 
FROM
   snowflake.account_usage.query_history
WHERE query_text ILIKE '%order_details%'

Screenshot 2023-09-01 at 14.32.29.png

  • ILIKE: Groß-/Kleinschreibung ignorieren beim Vergleichen von Zeichenfolgen
Einführung in Snowflake SQL

Abfrageverlauf

  • Finde langsame oder oft ausgeführte Abfragen
SELECT query_text, 
    start_time, 
    end_time, 
    execution_time 
FROM
   snowflake.account_usage.query_history
WHERE
   execution_time > 1000

Ergebnis filtern, wenn die Ausführungszeit über 1000 ms liegt

Einführung in Snowflake SQL

Lass uns üben!

Einführung in Snowflake SQL

Preparing Video For Download...