sql_preamble

Penggunaan

explore: explore_name {
  sql_preamble: SQL STATEMENT  ;;
}
Hierarki
sql_preamble
Nilai Default
Tidak ada
Menerima
Ekspresi SQL

Definisi

Parameter sql_preamble menentukan pernyataan SQL yang dijalankan sebelum kueri di Eksplorasi dijalankan. Penggunaan utama sql_preamble adalah untuk membuat fungsi yang ditentukan pengguna (UDF) di Google BigQuery. Sebagian besar dialek database memungkinkan Anda menginstal UDF secara langsung di server database, tetapi Google BigQuery tidak memiliki status, sehingga sql_preamble menyediakan fungsi ini.

Menggunakan Liquid di sql_preamble

Parameter sql_preamble mendukung atribut pengguna dan Liquid, yang memungkinkan pembuatan SQL dinamis untuk kasus penggunaan seperti menyetel variabel sesi, memilih berbagai data warehouse atau database, menerapkan penghapusan partisi di BigQuery, dan memungkinkan pemfilteran data yang fleksibel dengan berinteraksi dengan database pokok secara lebih langsung.

Pola penggunaan Liquid berikut didukung dalam parameter sql_preamble:

Pola penggunaan Liquid berikut tidak didukung di sql_preamble:

  • value
  • rendered_value
  • filterable_value
  • link
  • linked_value
  • _field._name

Contoh

Menggunakan sql_preamble untuk menentukan reservasi BigQuery

Tentukan reservasi Google BigQuery yang akan digunakan untuk kueri Eksplorasi dengan menggunakan pernyataan SQL BigQuery SET @@reservation dalam parameter sql_preamble:

explore: orders {
  sql_preamble:
    SET @@reservation='projects/your-project/locations/your-location/reservations/your-reservation';
}

Menggunakan sql_preamble untuk menambahkan median sementara

Buat fungsi buatan pengguna (UDF) di Google BigQuery yang menghitung median menggunakan pernyataan CREATE TEMP FUNCTION Google BigQuery, dan sisipkan fungsi median ke dalam SQL Google BigQuery sebelum setiap kueri di Eksplorasi dijalankan.

explore: salary {
  sql_preamble:
    CREATE TEMP FUNCTION MEDIAN(a_num ARRAY<FLOAT64>)
    RETURNS FLOAT64 AS ((
       SELECT
          AVG(num)
        FROM (
          SELECT
            row_number() OVER (ORDER BY num) -1 as rn
            , num
          FROM UNNEST(a_num) num
        )
        WHERE
          rn = TRUNC(ARRAY_LENGTH(a_num)/2)
            OR (
             MOD(ARRAY_LENGTH(a_num), 2) = 0 AND
              rn = TRUNC(ARRAY_LENGTH(a_num)/2)-1 )
    ));
  ;;
}

Menggunakan Liquid di sql_preamble untuk melokalkan nama tabel

Gunakan Liquid di sql_preamble untuk membuat tabel sementara yang diberi nama berdasarkan bahasa yang dipilih pengguna, sehingga satu model LookML dapat beradaptasi dengan berbagai konvensi penamaan internal:

explore: orders {
  sql_preamble: 
    WITH {{ _localization['storage_table_name'] }} AS (select * from users);;
  ...
}

Daripada menggunakan nama yang di-hardcode seperti mytable untuk tabel sementara, kode ini akan mengganti variabel Liquid dengan string sebenarnya yang ditentukan dalam file string lokal untuk kunci storage_table_name. Lihat Menggunakan lokalitas dalam variabel Liquid untuk mengetahui informasi selengkapnya.

Kueri Looker yang mengikuti pengantar kemudian akan mereferensikan tabel yang diberi nama secara dinamis ini. Misalnya, kueri SQL akan menggunakan FROM {{ _localization['storage_table_name'] }}.