SQL (für abgeleitete Tabellen)

Diese Seite bezieht sich auf den Parameter sql, der Teil einer abgeleiteten Tabelle ist.

Sie können sql auch als Teil eines Felds verwenden, wie auf der Seite mit der Parameterdokumentation für sql (für Felder) beschrieben.

Nutzung

view: my_derived_table {
derived_table: {
sql:
SELECT *
FROM Events
WHERE type NOT IN ('test', 'staff') ;;
...
Hierarchie
sql
Standardwert
Keine

Akzeptiert
Ein SQL-Block

Definition

Mit sql können Sie den SQL-Code angeben, der zum Generieren einer abgeleiteten Tabelle verwendet werden soll. Sie können jede beliebige SQL-Abfrage im Parameter sql verwenden, solange die SQL-Abfrage im Roh-SQL-Format geschrieben ist und nicht auf Looker-Felder verweist. Weitere Informationen zu abgeleiteten Tabellen finden Sie auf der Dokumentationsseite Abgeleitete Tabellen in Looker.

Neben normalen Datenbanktabellen können Sie auch auf LookML-Ansichten oder abgeleitete Tabellen in sql verweisen. Gehen Sie dazu so vor:

${view_or_derived_table_name.SQL_TABLE_NAME} AS view_or_derived_table_name

Die SQL_TABLE_NAME in dieser Referenz ist ein literaler String. Sie müssen sie nicht ersetzen. Wenn Sie beispielsweise in der abgeleiteten Tabelle key_customer_order_facts auf eine abgeleitete Tabelle namens key_customer verweisen möchten, könnte das so aussehen:

view: key_customer_order_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        COUNT( * ) AS lifetime_orders
      FROM
        order
      INNER JOIN
        ${key_customer.SQL_TABLE_NAME} AS key_customer
      ON
        order.customer_id = key_customer.id
      GROUP BY 1
      ;;
  }
}

Flüssigkeitsvariablen mit sql

Sie können auch Liquid-Variablen mit dem Parameter sql verwenden. Mit Flüssigkeitsvariablen können Sie auf Daten wie die Werte in einem Feld, Daten zum Feld und auf das Feld angewendete Filter zugreifen.

Die Liquid-Variablen date_start und date_end sind sehr nützlich für Datenbankdialekte, die Daten nach Datum in mehrere Tabellen partitionieren, z. B. BigQuery. Ausführliche Informationen finden Sie in diesem Hilfeartikel.

Insbesondere die Liquid-Variablen _in_query, _is_selected und _is_filtered können den abgeleiteten Tabellen einige interessante Funktionen hinzufügen. Sie geben „wahr“ oder „falsch“ zurück, je nachdem, ob ein Feld oder ein Filter in einer Abfrage enthalten ist. Es gibt einige Besonderheiten, die bei der korrekten Verwendung dieser Wahr/Falsch-Werte zu berücksichtigen sind. Weitere Informationen finden Sie auf der Seite für Flüssigkeitsvariablen.

Diese abgeleitete Tabelle ändert beispielsweise die Datenbanktabelle, die sie basierend auf den vom Nutzer ausgewählten Feldern abfragt:

view: dynamic_order_counts {
  derived_table: {
    sql:
      SELECT
        period, number_of_orders
      FROM
        {% dynamic if dates.reporting_date._in_query %}
          daily_orders
        {% elsif dates.reporting_week._in_query %}
          weekly_orders
        {% dynamic else %}
          monthly_orders
        {% dynamic endif %}
      GROUP BY 1
      ;;
  }
}

Beispiele

Erstellen Sie eine abgeleitete customer_order_facts-Tabelle:

view: customer_order_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        COUNT( * ) AS lifetime_orders
      FROM
        order
      GROUP BY 1
      ;;
  }
}

Wichtige Punkte

Tabellen, auf die sql verweist, müssen von der aktuellen Verbindung aus zugänglich sein

views, die eine abgeleitete Tabelle enthalten, werden von einem explore- oder join-Parameter referenziert, der wiederum von einem Modell referenziert wird. Das Modell bestimmt, welche Datenbankverbindung verwendet wird (siehe connection-Parameterdokumentation). Datenbankverbindungen selbst werden im Abschnitt Admin von Looker definiert. Wenn Sie im Parameter sql auf eine Tabelle verweisen, muss innerhalb der zugehörigen Verbindung auf die Tabelle zugegriffen werden können.

Unverarbeiteten SQL-Code mit sql und nicht mit Looker-Feldverweisen verwenden

Der SQL-Code, den Sie in den abgeleiteten sql-Parameter der Tabelle schreiben, sollte unbearbeitet sein und auf die zugrunde liegenden Spalten und Tabellen der Datenbank verweisen. Sie sollte nicht auf Looker-Feldnamen oder Ansichtsnamen verweisen.

Für die Verwendung von _filters['view_name.field_name'] in einer abgeleiteten Tabelle ist sql_quote erforderlich

Wenn Sie eine SQL-basierte abgeleitete Tabelle definieren und die Liquid-Variable _filters['view_name.field_name'] verwenden, bei der der Wert in SQL gerendert wird und der Filter einen Stringwert zurückgibt, müssen Sie die Ausgabe in einfache Anführungszeichen setzen. Fügen Sie dazu den Liquid-Filter sql_quote hinzu.

Andernfalls erhalten Sie die folgende LookML-Warnung, wenn Sie die Liquid-Variable nicht mit | sql_quote anhängen:

Using "_filters[]" in Derived Table SQL without "sql_quote" is discouraged.

Weitere Informationen finden Sie in der Dokumentation zur Referenz für Flüssigkeitsvariablen.