Membuka Antarmuka SQL

Lapisan pemodelan semantik LookML Looker memungkinkan analis data menentukan dimensi, agregat, penghitungan, dan hubungan data dalam database SQL. Model LookML menyediakan penggunaan kembali kode dan integrasi Git. Model LookML yang terstruktur dengan baik memungkinkan pengguna melakukan eksplorasi dan pelaporan data layanan mandiri mereka sendiri.

Model LookML adalah dasar dari setiap data yang diminta dari Looker, baik permintaan tersebut berasal dari antarmuka Jelajah Looker di UI Looker, visualisasi sematan di portal perusahaan Anda atau aplikasi pihak ketiga lainnya, atau aplikasi kustom yang dikembangkan dengan API Looker. Antarmuka SQL Terbuka menyediakan akses ke model LookML untuk aplikasi pihak ketiga yang mendukung Java Database Connectivity (JDBC). Aplikasi dapat terhubung ke model LookML seolah-olah itu adalah database, sehingga pengguna dapat memanfaatkan semua pekerjaan yang dilakukan oleh analis data mereka dalam model LookML, sambil menggunakan alat apa pun yang paling mereka kuasai.

Cara Antarmuka SQL Terbuka menampilkan elemen project LookML

Untuk memahami cara Open SQL Interface menampilkan elemen project LookML, Anda harus memahami cara project LookML disusun.

Project LookML adalah kumpulan file yang menjelaskan objek, koneksi database, dan elemen antarmuka pengguna yang digunakan untuk menjalankan kueri SQL di Looker (lihat Istilah dan konsep LookML untuk mengetahui informasi selengkapnya). Konsep project LookML berikut terkait dengan Open SQL Interface:

  • Model LookML menentukan koneksi database dan satu atau beberapa Jelajah. Antarmuka SQL Terbuka menampilkan model sebagai skema database.
  • Eksplorasi adalah pengelompokan logis dari satu atau beberapa tampilan dan hubungan gabungan antara tampilan tersebut. Antarmuka SQL Terbuka menampilkan Eksplorasi sebagai tabel database.
  • Tampilan menentukan kumpulan kolom (dimensi dan ukuran). Tampilan umumnya didasarkan pada tabel di database Anda atau tabel turunan. Tampilan dapat berisi kolom dari tabel database pokok serta dimensi atau ukuran kustom yang mungkin diperlukan pengguna akhir Anda. Antarmuka SQL Terbuka menampilkan kombinasi nama tampilan dan nama kolom sebagai nama kolom database. Misalnya, dimensi id dalam tampilan order_items ditampilkan oleh Open SQL Interface sebagai kolom database yang disebut order_items.id.

Jelajah Looker dapat menentukan hubungan gabungan antara beberapa tampilan. Karena satu tampilan mungkin memiliki kolom dengan nama yang sama dengan kolom dalam tampilan lain, Open SQL Interface menyertakan nama tampilan dan nama kolom saat mereferensikan kolom. Oleh karena itu, gunakan format ini untuk mereferensikan nama kolom saat mengirim kueri ke Open SQL Interface:

`<view_name>.<field_name>`

Sebagai contoh, jika ada Jelajah bernama order_items yang menggabungkan tampilan bernama customer dengan tampilan bernama product dan kedua tampilan ini memiliki dimensi id, Anda akan merujuk ke dua kolom id sebagai `customer.id` dan `product.id`. Untuk menggunakan nama yang sepenuhnya memenuhi syarat dengan nama Eksplorasi juga, Anda akan merujuk ke dua kolom sebagai `order_items`.`customer.id` dan `order_items`.`product.id`. (Lihat Gunakan tanda petik terbalik di sekitar ID database untuk mengetahui informasi tentang tempat meletakkan tanda petik terbalik saat merujuk ke ID database.)

Menyiapkan Antarmuka SQL Terbuka

Untuk menggunakan Open SQL Interface, lakukan langkah-langkah berikut:

  1. Pastikan persyaratan terpenuhi.
  2. Download file driver JDBC Open SQL Interface.

Bagian berikut menjelaskan langkah-langkah ini.

Persyaratan

Komponen berikut diperlukan untuk menggunakan Open SQL Interface:

Mendownload driver JDBC Open SQL Interface

Driver JDBC Antarmuka SQL Terbuka Looker disebut avatica-<release_number>-looker.jar. Download versi terbaru dari GitHub di https://github.com/looker-open-source/calcite-avatica/releases.

Driver JDBC mengharapkan format URL berikut:

jdbc:looker:url=https://Looker instance URL

Contoh:

jdbc:looker:url=https://myInstance.cloud.looker.com

Class driver JDBC adalah:

org.apache.calcite.avatica.remote.looker.LookerDriver

Mengautentikasi ke Open SQL Interface

Open SQL Interface mendukung tiga metode untuk autentikasi:

OAuth

Klien JDBC yang mendukung OAuth dapat dikonfigurasi untuk menggunakan server OAuth instance Looker. Ikuti langkah-langkah untuk mengonfigurasi autentikasi OAuth:

  1. Gunakan ekstensi API Explorer untuk mendaftarkan klien OAuth JDBC dengan instance Looker Anda sehingga instance Looker dapat mengenali permintaan OAuth. Lihat Mendaftarkan aplikasi klien OAuth untuk mengetahui petunjuknya.
  2. Login ke Looker dengan OAuth untuk meminta token akses. Lihat Melakukan login pengguna menggunakan OAuth untuk melihat contohnya.
  3. Gunakan objek Properties untuk meneruskan kredensial OAuth saat membuka koneksi JDBC ke Open SQL Interface.

Berikut adalah contoh yang menggunakan DriverManager#getConnection(<String>, <Properties>`):

String access_token = getAccessToken() //uses the Looker OAuth flow to get a token
String URL = "jdbc:looker:url=https://myInstance.cloud.looker.com"
Properties info = new Properties( );
info.put("token", access_token);
Connection conn = DriverManager.getConnection(URL, info);

Membuat token akses menggunakan kunci API

Daripada menggunakan alur OAuth standar untuk membuat token akses, Anda dapat mengikuti langkah-langkah berikut untuk menggunakan Looker API guna membuat token akses yang dapat diteruskan ke driver JDBC Open SQL Interface:

  1. Buat kunci API untuk pengguna Looker Anda seperti yang dijelaskan di halaman Setelan admin - Pengguna.
  2. Gunakan endpoint API login untuk instance Looker Anda. Respons mencakup token akses dalam format Authorization: token <access_token>. Berikut adalah contoh perintah curl yang dapat Anda gunakan untuk membuat permintaan ini:

      curl -k -d "client_id=<client_id>&client_secret=<client_secret>" https://<looker_host>/login\
    
  3. Teruskan nilai <access_token> respons sebagai token di objek Properties untuk meneruskan kredensial OAuth saat membuka koneksi JDBC ke Open SQL Interface.

Kunci API

Anda juga dapat menggunakan kunci API untuk mengautentikasi sebagai pengganti nama pengguna dan sandi. Kunci API dianggap kurang aman daripada OAuth dan hanya dapat tersedia selama pratinjau Open SQL Interface. Lihat Kunci API untuk mengetahui informasi tentang cara membuat kunci API untuk instance Looker Anda.

Gunakan bagian Client ID dari kunci API Looker sebagai nama pengguna. Gunakan bagian Client Secret untuk sandi.

Menjalankan kueri dengan Antarmuka SQL Terbuka

Perhatikan panduan berikut saat menjalankan kueri dengan Open SQL Interface:

Batasan SQL

Perhatikan batasan SQL berikut saat mengirim kueri ke Open SQL Interface:

Gunakan tanda kutip tunggal terbalik di sekitar ID database

Saat mengirim kueri ke Open SQL Interface, gunakan tanda petik terbalik di sekitar skema, tabel, dan ID kolom. Berikut cara menentukan elemen database menggunakan tanda petik terbalik dengan istilah Looker:

  • schema: `<model_name>`
  • tabel: `<explore_name>`
  • kolom: `<view_name>.<field_name>`

Berikut adalah contoh format pernyataan SELECT menggunakan elemen ini:

SELECT `view.field`
  FROM `model`.`explore`
  LIMIT 10;

Tentukan ukuran LookML dengan AGGREGATE()

Tabel database biasanya hanya berisi dimensi, data yang menjelaskan satu atribut tentang baris dalam tabel. Namun, project LookML dapat menentukan dimensi dan ukuran. Ukuran adalah agregasi data di beberapa baris, seperti SUM, AVG, MIN, atau MAX. (Jenis ukuran lainnya juga didukung, lihat halaman Jenis ukuran untuk mengetahui daftar lengkap jenis ukuran LookML yang didukung.)

Dengan Antarmuka SQL Terbuka, Anda harus menetapkan semua ukuran LookML yang disertakan dalam kueri dengan membungkus ukuran (termasuk tanda petik terbalik) dalam fungsi khusus AGGREGATE(). Misalnya, gunakan ini untuk menentukan ukuran jumlah dari tampilan pesanan:

AGGREGATE(`orders.count`)

Anda harus membungkus ukuran LookML dalam fungsi AGGREGATE(), baik ukuran tersebut berada dalam klausa SELECT, klausa HAVING, atau klausa ORDER BY.

Jika tidak yakin apakah kolom adalah ukuran LookML, Anda dapat menggunakan metode DatabaseMetaData.getColumns untuk mengakses metadata project LookML. Kolom IS_GENERATEDCOLUMN akan menunjukkan YES untuk ukuran LookML, dan NO untuk dimensi LookML. Lihat bagian Mengakses metadata database untuk mengetahui informasi selengkapnya.

Tentukan kolom dan parameter hanya filter dengan JSON_OBJECT

Open SQL Interface mendukung parameter dan kolom khusus filter.

Saat menjalankan kueri dengan Open SQL Interface, Anda dapat menerapkan parameter dan kolom hanya filter ke kueri dengan menyertakan panggilan konstruktor JSON_OBJECT dengan format berikut:

JSON_OBJECT(
    '<view>.<parameter name>', '<parameter value>',
    '<view>.<filter name>', '<Looker filter expression>'
)

Objek JSON dapat berisi nol atau lebih pasangan nilai kunci filter dan nol atau lebih pasangan nilai kunci parameter.

  • Kunci dalam konstruktor JSON_OBJECT harus berupa nama kolom atau parameter khusus filter.
  • Untuk kolom hanya filter, nilai untuk setiap kunci harus berupa ekspresi filter string Looker.
  • Untuk parameter, nilai untuk setiap kunci harus berupa nilai biasa yang ditentukan dalam definisi parameter.

Lihat bagian berikut untuk contoh penggunaan parameter dan kolom hanya filter dengan Open SQL Interface.

Contoh parameter

Sebagai contoh penggunaan parameter dengan Open SQL Interface, jika tampilan customers memiliki parameter yang ditentukan di Looker sebagai berikut:

parameter: segment {
  type: string
  allowed_value: {
    label: "Small (less than 500)"
    value: "small_customers"
  }
  allowed_value: {
    label: "Larger (greater than 10,000)"
    value: "large_customers"
  }
  allowed_value: {
    label: "Medium customers (Between 500 and 10,000)"
    value: "medium_customers"
  }
}

Anda dapat mengirim kueri ini ke Open SQL Interface untuk menerapkan nilai parameter segment medium_customers ke kueri:

SELECT `customers.segment_size`,
  AGGREGATE(`orders.total_amount`)
FROM `ecommerce`.`orders`(JSON_OBJECT(
    'customers.segment', 'medium_customers'
))
GROUP BY `customers.state`, `customers.city`
HAVING AGGREGATE(`orders.count`) > 10
ORDER BY 3 DESC LIMIT 5;

Antarmuka SQL Terbuka akan meneruskan nilai parameter ini ke kueri di Looker, dan Looker akan menerapkan nilai medium_customers ke kolom apa pun di Eksplorasi yang dikonfigurasi untuk menggunakan parameter segment. Lihat dokumentasi parameter untuk mengetahui informasi tentang cara kerja parameter di Looker.

Contoh kolom hanya filter

Anda dapat menggunakan kolom filter dengan Open SQL Interface. Misalnya, jika tampilan products memiliki dimensi dan kolom hanya filter yang ditentukan di Looker sebagai berikut:

filter: brand_select {
  type: string
  }

dimension: brand_comparitor {
  sql:
    CASE
      WHEN {% condition brand_select %} ${products.brand_name} {% endcondition %}
      THEN ${products.brand_name}
      ELSE "All Other Brands"
    END ;;
    }

Anda dapat menggunakan filter brand_select dengan Open SQL Interface dengan mengirimkan kueri seperti berikut:

SELECT `products.brand_comparator`, `products.number_of_brands`,
  AGGREGATE(`products.total_revenue`)
FROM `ecommerce`.`orders`(JSON_OBJECT(
    'products.brand_select', '%Santa Cruz%'
))
GROUP BY `products.brand_comparator`
ORDER BY 3 DESC LIMIT 5;

Antarmuka SQL Terbuka akan menerapkan ekspresi filter string Looker %Santa Cruz% ke kueri di Looker. Lihat dokumentasi filter untuk mengetahui informasi tentang cara kerja kolom hanya filter di Looker.

Berikan nilai always_filter atau conditionally_filter dalam klausa WHERE atau HAVING

Open SQL Interface dapat mendukung Eksplorasi yang memiliki always_filter atau conditionally_filter, tetapi tidak keduanya.

Jika Anda telah menentukan Jelajah LookML dengan always_filter atau conditionally_filter, Anda harus meneruskan nilai untuk kolom filter dalam kueri SQL ke Open SQL Interface:

  • Jika definisi filter menentukan satu atau beberapa dimensi, Anda harus menyertakan klausa WHERE dalam kueri SQL untuk setiap dimensi filter.
  • Jika definisi filter menentukan satu atau beberapa ukuran, Anda harus menyertakan klausa HAVING dalam kueri SQL untuk setiap ukuran filter.

Misalnya, ada model faa tempat Anda telah menentukan Eksplorasi LookML flights dengan parameter always_filter yang menentukan dimensi country dan aircraft_category serta ukuran count, sebagai berikut:

explore: flights {
  view_name: flights
  always_filter: {
    filters: [country : "Peru" , aircraft_category : "Airplane", count : ">1"]
  }
}

Dalam kueri ke Open SQL Interface, Anda harus menggunakan klausa WHERE untuk meneruskan nilai bagi dimensi filter dan klausa HAVING untuk meneruskan nilai bagi filter ukuran ke model LookML, seperti berikut:

SELECT
    `flights.make`
FROM
    `faa`.`flights`
      WHERE `flights.country` = 'Ecuador' AND `flights.aircraft_category` = 'Airplane'
      GROUP BY
          1
      HAVING `flights.count` > 2) 
LIMIT 5

Jika Anda tidak meneruskan nilai filter untuk setiap dimensi dan ukuran yang ditentukan dalam parameter always_filter, kueri akan menampilkan error. Hal yang sama berlaku untuk dimensi dan ukuran yang ditentukan dalam parameter conditionally_filter, kecuali Anda dapat menentukan parameter conditionally_filter dengan subparameter unless, seperti ini:

explore: flights {
  view_name: flights
  conditionally_filter: {
    filters: [country : "Peru" , aircraft_category : "Airplane"]
    unless: [count]
  }
}

Dalam hal ini, Anda harus meneruskan nilai filter untuk setiap dimensi dan ukuran yang ditentukan dalam subparameter filters dari conditionally_filter, kecuali jika Anda menentukan filter pada kolom dalam subparameter unless. (Lihat halaman dokumentasi conditionally_filter untuk mengetahui detail tentang penggunaan subparameter unless.)

Misalnya, salah satu kueri berikut ke Open SQL Interface dapat diterima. Kueri pertama memberikan nilai filter untuk kolom yang ditentukan dalam subparameter filters, dan kueri kedua memberikan nilai filter untuk kolom yang ditentukan dalam subparameter unless:

SELECT
    `flights.make`
FROM
    `faa`.`flights`
      WHERE `flights.country` = 'Ecuador' AND `flights.aircraft_category` = 'Airplane'
      
LIMIT 5
SELECT
    `flights.make`
FROM
    `faa`.`flights`
      GROUP BY
          1
      HAVING `flights.count` > 2

Contoh

Berikut adalah contoh kueri yang menggunakan dimensi dan ukuran. Kueri ini mengambil dimensi state dan city dari tabel virtual customers serta ukuran total amount dari tabel virtual orders. Kedua tampilan ini digabungkan ke dalam Eksplorasi pesanan dalam model eCommerce. Untuk kota yang memiliki lebih dari 10 pesanan, respons kueri ini menampilkan 5 kota teratas berdasarkan jumlah pesanan:

SELECT `customers.state`, `customers.city`,
  AGGREGATE(`orders.total_amount`)
FROM `ecommerce`.`orders`
GROUP BY `customers.state`, `customers.city`
HAVING AGGREGATE(`orders.count`) > 10
ORDER BY 3 DESC LIMIT 5;

Mengakses metadata database

Open SQL Interface mendukung subset DatabaseMetaData interface JDBC standar, yang digunakan untuk mendapatkan informasi tentang database pokok. Anda dapat menggunakan metode antarmuka DatabaseMetaData berikut untuk mendapatkan informasi tentang model LookML Anda:

Antarmuka SQL Terbuka hanya menampilkan hasil untuk model, Jelajah, dan kolom yang dapat Anda akses.

DatabaseMetadata.getSchemas

Tabel berikut menjelaskan hubungan model LookML dengan struktur database standar dalam respons metode antarmuka DatabaseMetadata.getSchemas.

getSchemas kolom respons Deskripsi
TABLE_SCHEM Nama model LookML
TABLE_CATALOG (null)

DatabaseMetadata.getTables

Tabel berikut menjelaskan hubungan antara model LookML dengan struktur database dalam respons metode antarmuka DatabaseMetaData.getTables. Respons mencakup metadata JDBC standar serta metadata khusus Looker:

getTables kolom respons Deskripsi
Metadata standar JDBC
TABLE_CAT (null)
TABLE_SCHEM Nama model LookML
TABLE_NAME Nama Eksplorasi LookML
TABLE_TYPE Selalu menampilkan nilai TABLE_TYPE
REMARKS (null)
TYPE_CAT (null)
TYPE_SCHEM (null)
TYPE_NAME String yang merepresentasikan jenis tabel. Jenis yang mungkin adalah TABLE, VIEW, SYSTEM TABLE, GLOBAL TEMPORARY, LOCAL TEMPORARY, ALIAS, SYNONYM.
SELF_REFERENCING_COL_NAME (null)
REF_GENERATION (null)
Metadata khusus Looker
DESCRIPTION Jelajahi deskripsi
LABEL Jelajahi label
TAGS Jelajahi tag
CONDITIONALLY_FILTER_UNLESS Daftar kolom dalam subparameter unless dari parameter conditionally_filter di Eksplorasi. Jika tidak ada kolom yang ditentukan dalam subparameter unless, atau jika tidak ada parameter conditionally_filter yang ditentukan untuk Jelajahi, nilai ini adalah null.

DatabaseMetadata.getColumns

Tabel berikut menjelaskan hubungan antara model LookML dengan struktur database dalam respons metode antarmuka DatabaseMetaData.getColumns. Respons mencakup metadata JDBC standar serta metadata khusus Looker:

getColumns kolom respons Deskripsi
Metadata standar JDBC
TABLE_CAT (null)
TABLE_SCHEM Nama model LookML
TABLE_NAME Nama Jelajah LookML
COLUMN_NAME Nama kolom LookML dalam format `<view_name>.<field_name>`. Contoh, `orders.amount`.
DATA_TYPE Kode java.sql.Types kolom. Misalnya, kolom yesno Looker adalah kode jenis SQL 16 (BOOLEAN).
TYPE_NAME String yang merepresentasikan jenis data kolom. Untuk jenis yang ditentukan pengguna (UDT), nama jenis sepenuhnya memenuhi syarat.
COLUMN_SIZE Bilangan bulat yang merepresentasikan jumlah maksimum karakter atau byte yang dapat disimpan dalam kolom.
BUFFER_LENGTH (null)
DECIMAL_DIGITS Bilangan bulat yang merepresentasikan skala data: jumlah digit di sebelah kanan desimal, untuk jenis data yang berlaku, atau jumlah digit pecahan. Null ditampilkan untuk jenis data yang tidak dapat menggunakan DECIMAL_DIGITS.
NUM_PREC_RADIX Bilangan bulat yang merepresentasikan basis atau radiks (biasanya 10 atau 2) untuk data.
NULLABLE

Bilangan bulat yang menunjukkan apakah nilai null diizinkan:

  • 0: columnNoNulls - mungkin tidak mengizinkan nilai NULL
  • 1: columnNullable - pasti mengizinkan nilai NULL
  • 2: columnNullableUnknown - nullabilitas tidak diketahui
REMARKS (null)
COLUMN_DEF (null)
SQL_DATA_TYPE (null)
SQL_DATETIME_SUB (null)
CHAR_OCTET_LENGTH Untuk jenis data karakter, bilangan bulat yang merepresentasikan jumlah maksimum byte dalam kolom.
ORDINAL_POSITION Ordinal berbasis 1 kolom dalam Eksplorasi (menggabungkan dimensi dan ukuran secara alfabetis menurut nama tampilan, lalu nama kolom)
IS_NULLABLE Selalu menampilkan nilai YES
SCOPE_CATALOG (null)
SCOPE_SCHEMA (null)
SCOPE_TABLE (null)
SOURCE_DATA_TYPE (null)
IS_AUTOINCREMENT (null)
IS_GENERATEDCOLUMN YES untuk ukuran, NO untuk dimensi
Metadata khusus Looker
DIMENSION_GROUP Nama grup dimensi jika kolom adalah bagian dari grup dimensi. Jika kolom bukan bagian dari grup dimensi, nilai ini adalah null.
DRILL_FIELDS Daftar kolom penelusuran yang ditetapkan untuk dimensi atau ukuran, jika ada
FIELD_ALIAS Alias untuk kolom, jika ada
FIELD_CATEGORY Apakah kolom berupa dimension atau measure
FIELD_DESCRIPTION Kolom description
FIELD_GROUP_VARIANT Jika kolom ditampilkan di bawah label grup kolom, FIELD_GROUP_VARIANT akan menentukan nama kolom yang lebih pendek yang ditampilkan di bawah label grup.
FIELD_LABEL Kolom label
FIELD_NAME Nama dimensi atau ukuran
LOOKER_TYPE Jenis kolom LookML untuk dimensi atau ukuran
REQUIRES_REFRESH_ON_SORT Apakah kueri SQL harus dimuat ulang untuk mengurutkan ulang nilai kolom (TRUE), atau apakah nilai kolom dapat diurutkan ulang tanpa memerlukan pemuatan ulang kueri SQL (FALSE).
SORTABLE Apakah kolom dapat diurutkan (TRUE) atau tidak dapat diurutkan (FALSE)
TAGS Kolom tags
USE_STRICT_VALUE_FORMAT Apakah kolom menggunakan format nilai yang ketat (TRUE) atau tidak (FALSE)
VALUE_FORMAT String format nilai untuk kolom
VIEW_LABEL Lihat label untuk kolom
VIEW_NAME Nama tampilan tempat kolom ditentukan dalam project LookML
HIDDEN Apakah kolom disembunyikan dari pemilih kolom di Eksplorasi (TRUE), atau apakah kolom terlihat di pemilih kolom di Eksplorasi (FALSE).
ALWAYS_FILTER Nilai default untuk parameter always_filter yang ditetapkan di kolom. Jika kolom bukan bagian dari parameter always_filter, nilai ini adalah null.
CONDITIONALLY_FILTER Nilai default untuk parameter conditionally_filter yang ditetapkan di kolom. Jika kolom bukan bagian dari parameter conditionally_filter, nilai ini adalah null.

Mengidentifikasi kueri Antarmuka SQL Terbuka di UI Looker

Admin Looker dapat menggunakan UI Looker untuk mengidentifikasi kueri mana yang berasal dari Open SQL Interface:

  • Di halaman admin Queries, kueri dari Open SQL Interface memiliki nilai Source "SQL Interface". Nilai Pengguna akan menampilkan nama pengguna Looker yang menjalankan kueri. Anda dapat mengklik tombol Detail untuk kueri guna menampilkan informasi tambahan tentang kueri tersebut. Dalam dialog Detail, Anda dapat mengklik Kueri Antarmuka SQL untuk melihat kueri SQL yang dikirim ke Looker dari Antarmuka SQL Terbuka.
  • Di Eksplorasi Histori Aktivitas Sistem, kueri dari Antarmuka SQL Terbuka memiliki nilai Sumber "sql_interface". Nilai Email Pengguna akan menampilkan alamat email pengguna Looker yang menjalankan kueri. Anda dapat langsung membuka Eksplorasi Histori yang difilter pada "sql_interface" dengan menyisipkan alamat instance Looker Anda di awal URL ini:

    https://Looker instance URL/explore/system__activity/history?fields=history.source,history.completed_date&f[history.source]=%22sql_interface%22
    

Repositori untuk dependensi pihak ketiga

Link berikut memberikan akses ke repositori yang dihosting Google untuk dependensi pihak ketiga yang digunakan oleh driver JDBC Looker:

https://third-party-mirror.googlesource.com/looker_sql_interface/+/refs/heads/master/third_party/