LookML ist eine Sprache zur Beschreibung von Dimensionen, Summen, Berechnungen und Datenbeziehungen in einer SQL-Datenbank. Looker verwendet ein in LookML erstelltes Modell, um SQL-Abfragen für eine bestimmte Datenbank zu strukturieren.
LookML-Projekte
Ein LookML-Projekt ist eine Sammlung von Modell-, Ansichts- und Dashboard-Dateien, die in der Regel gemeinsam über ein Git-Repository versioniert werden. Die Modelldateien enthalten Informationen darüber, welche Tabellen zu verwenden sind und wie sie verknüpft werden sollen. Die Ansichtsdateien enthalten Angaben dazu, wie Informationen zu den einzelnen Tabellen (oder für mehrere Tabellen, wenn die Joins dies zulassen) berechnet werden.
LookML trennt Struktur von Inhalt. Das heißt, die Abfragestruktur (wie Tabellen verbunden sind) ist vom Abfrageinhalt unabhängig (aufzurufende Spalten, abgeleitete Felder, zu berechnende Summenfunktionen und anzuwendende Filterausdrücke).
Von Looker generierte SQL-Abfragen
Für Datenanalysten unterstützt LookML den DRY-Stil (&t; nicht wiederholt). Dies bedeutet, dass Sie SQL-Ausdrücke einmal an einem Ort schreiben und Looker den Code wiederholt verwendet, um Ad-hoc-SQL-Abfragen zu generieren. Für geschäftliche Benutzer ist das Endergebnis die Fähigkeit, komplexe Abfragen in Looker zu erstellen und sich dabei nur auf den tatsächlich benötigten Inhalt zu konzentrieren, nicht auf die Komplexität der SQL-Struktur.
Die folgende Abbildung zeigt eine in Looker erstellte Abfrage, die Werte aus mehreren Tabellen verbindet – Orders Items, Products und Users:
In der Abbildung oben muss der Endnutzer die SQL-Ausdrücke für Joins oder Filter nicht verstehen.
Eine Abhängigkeitssprache zur Beschreibung von Datenstrukturen
LookML ist eine Abhängigkeitssprache wie make, im Gegensatz zu einer imperativen Sprache wie C oder Ruby. LookML stellt vordefinierte Datentypen und Syntax für die Datenmodellierung bereit. Die LookML-Syntax weist eine klare und leicht zu erlernende Struktur auf. Sie benötigen keine Vorkenntnisse in Programmiersprachen. Alles, was Sie dazu wissen müssen, ist hier dokumentiert. LookML ist von bestimmten SQL-Dialekten unabhängig und enthält alle wesentlichen SQL-Ausdrücke für jede SQL-Implementierung.
Codebeispiel
Das unten stehende Beispiel zeigt ein minimales LookML-Projekt für einen E-Commerce-Store mit einer Modelldatei und zwei Ansichtsdateien:
######################################
# FILE: ecommercestore.model.lkml #
# Define the explores and join logic #
######################################
connection: order_database
include: "*.view.lkml"
explore: orders {
join: customers {
sql_on: ${orders.customer_id} = ${customers.id} ;;
}
}
##########################################################
# FILE: orders.view.lkml #
# Define the dimensions and measures for the ORDERS view #
##########################################################
view: orders {
dimension: id {
primary_key: yes
type: number
sql: ${TABLE}.id ;;
}
dimension: customer_id { # field: orders.customer_id
sql: ${TABLE}.customer_id ;;
}
dimension: amount { # field: orders.amount
type: number
value_format: "0.00"
sql: ${TABLE}.amount ;;
}
dimension_group: created { # generates fields:
type: time # orders.created_time, orders.created_date
timeframes: [time, date, week, month] # orders.created_week, orders.created_month
sql: ${TABLE}.created_at ;;
}
measure: count { # field: orders.count
type: count # creates a sql COUNT(*)
drill_fields: [drill_set*] # list of fields to show when someone clicks 'ORDERS Count'
}
measure: total_amount {
type: sum
sql: ${amount} ;;
}
set: drill_set {
fields: [id, created_time, customers.name, amount]
}
}
#############################################################
# FILE: customers.view.lkml #
# Define the dimensions and measures for the CUSTOMERS view #
#############################################################
view: customers {
dimension: id {
primary_key: yes
type: number
sql: ${TABLE}.id ;;
}
dimension: city { # field: customers.city
sql: ${TABLE}.city ;;
}
dimension: state { # field: customers.state
sql: ${TABLE}.state ;;
}
dimension: name {
sql: CONCAT(${TABLE}.firstname, " ", ${TABLE}.lastname) ;;
}
measure: count { # field: customers.count
type: count # creates a sql COUNT(*)
drill_fields: [drill_set*] # fields to show when someone clicks 'CUSTOMERS Count'
}
set: drill_set { # set: customers.drill_set
fields: [id, state, orders.count] # list of fields to show when someone clicks 'CUSTOMERS Count'
}
}
Bei LookML wird die Groß-/Kleinschreibung beachtet
Beachten Sie beim Verweisen auf LookML-Elemente, dass bei LookML die Groß-/Kleinschreibung berücksichtigt wird. Sie erhalten eine Warnung von Looker, wenn Sie auf ein Element verwiesen haben, das nicht vorhanden ist. Im folgenden Beispiel hat der Entwickler FALSCH & FERTIG geschrieben. In der Looker-IDE wird eine Warnung angezeigt, dass e_FLIGHTS_pdt
nicht vorhanden ist. Außerdem schlägt die IDE den Namen einer vorhandenen explorativen Datenanalyse vor, die e_flights_pdt
lautet:
Wenn Ihr Projekt jedoch sowohl e_FLIGHTS_pdt
als auch e_flights_pdt
enthält, kann die Looker-IDE Sie nicht korrigieren, sodass Sie sich sicher sein sollten, welche Version Sie beabsichtigt haben. Generell empfiehlt es sich, beim Benennen von LookML-Objekten kleingeschrieben zu bleiben.
Bei IDE-Ordnernamen wird ebenfalls zwischen Groß- und Kleinschreibung unterschieden. Bei der Angabe von Dateipfaden müssen Sie stets die richtige Groß-/Kleinschreibung von Ordnernamen verwenden. Wenn Sie beispielsweise einen Ordner mit dem Namen Views
haben, müssen Sie dieselbe Groß- und Kleinschreibung im Parameter include
verwenden. Die Looker-IDE gibt einen Fehler zurück, wenn die Groß- und Kleinschreibung nicht mit einem vorhandenen Ordner in Ihrem Projekt übereinstimmt:
Überblick über grundlegende LookML-Elemente
Im folgenden Diagramm sind grundlegende LookML-Elemente und ihre Beziehungen dargestellt. Weitere Informationen finden Sie unter LookML-Begriffe und -Konzepte.