Sama seperti di SQL, join di LookML digunakan untuk menggabungkan baris dari dua tabel atau lebih, berdasarkan kolom terkait di antara tabel tersebut.
Di LookML, Jelajah — sebagaimana ditentukan oleh parameter LookML explore
— digunakan untuk menentukan cara pengguna dapat mengkueri data. Eksplorasi terdiri dari setidaknya satu tampilan atau sekumpulan tampilan yang digabungkan. Tampilan utama di Jelajah selalu disertakan dalam kueri. Tampilan gabungan biasanya hanya disertakan jika diperlukan untuk memenuhi kueri.
Tampilan LookML sesuai dengan tabel SQL (atau elemen lain yang memiliki struktur tabel) dalam database, atau dengan tabel turunan. Tampilan menentukan kolom atau kolom apa yang tersedia di database, dan cara mengaksesnya.
Contoh berikut adalah definisi untuk Jelajahi orders
.
explore: orders {
join: users {
type: left_outer
sql_on: ${orders.user_id} = ${users.id} ;;
relationship: many_to_one
}
}
Tampilan orders
, yang merupakan tampilan utama di Jelajah, digabungkan ke tampilan users
dengan SQL LEFT OUTER JOIN
, seperti yang ditunjukkan oleh parameter LookML type: left_outer
. Klausa SQL ON
, yang ditentukan oleh parameter LookML sql_on
, tidak menggunakan table_alias.column
, tetapi merujuk to ${view_name.field_name}
. Hal ini dilakukan agar jika nama tabel atau nama kolom berubah dalam database, perubahan tersebut hanya perlu dilakukan di satu tempat.
Parameter relationship
penting. Penggabungan dapat menyebabkan masalah fanout saat baris diduplikasi. Dengan menentukan bahwa banyak pesanan akan bergabung hanya dengan satu pengguna, Looker akan mengenali bahwa fanout tidak akan terjadi dari gabungan ini, sehingga penanganan khusus tidak diperlukan. Namun, hubungan one_to_many
dapat memicu fanout.
Pembuatan otomatis tampilan dan Eksplorasi secara default menggunakan left outer join. Namun, dalam contoh sebelumnya, kemungkinan besar setiap pesanan akan memiliki tepat satu pengguna, sehingga gabungan dalam contoh ini dapat berupa gabungan dalam.
Untuk melihat SQL yang dihasilkan dari Eksplorasi, Anda dapat menjalankan Eksplorasi di UI, lalu memilih tab SQL di panel Data.
Misalnya, jika Anda membuka Eksplorasi Pesanan, yang ditentukan sebelumnya, lalu memilih kolom ID Pengguna dan Jumlah, SQL yang dihasilkan akan terlihat seperti berikut:
SELECT
`user_id` AS `orders.user_id`,
COUNT(*) AS `orders.count`
FROM
`thelook`.`orders` AS `orders`
GROUP BY
1
ORDER BY
2 DESC
LIMIT 500
Dalam contoh ini, tabel pengguna tidak direferensikan sama sekali. Objek ini hanya dimasukkan jika diperlukan.
Jika Anda menghapus dimensi ID Pengguna dan menambahkan dimensi ID dari tampilan Pengguna, SQL akan terlihat seperti berikut:
SELECT
`users`.`id` AS `users.id`,
COUNT(*) AS `orders.count`
FROM
`thelook`.`orders` AS `orders`
INNER JOIN `thelook`.`users` AS `users` ON `orders`.`user_id` = `users`.`id`
GROUP BY
1
ORDER BY
2 DESC
LIMIT 500
Dalam hal ini, karena ada pilihan dari tampilan Pengguna, gabungan disertakan.
Contoh berikut menunjukkan LookML dalam file Explore orders
, yang telah ditentukan sebelumnya, dan menambahkan gabungan ke tampilan order_items
:
explore: orders {
join: users {
type: inner
sql_on: ${orders.user_id} = ${users.id} ;;
relationship: many_to_one
}
join: order_items {
type: inner
sql_on: ${orders.id} = ${order_items.order_id} ;;
relationship: one_to_many
}
}
Sekarang, jika Anda membuka Eksplorasi Pesanan di UI, Anda akan melihat tampilan Item Pesanan. Jika Anda memilih ukuran Total Harga Jual dari tampilan Item Pesanan bersama dengan Jumlah dari Pesanan dan ID dari Pengguna, Looker akan membuat SQL berikut:
SELECT
`users`.`id` AS `users.id`,
COUNT(DISTINCT orders.id ) AS `orders.count`,
COALESCE(SUM(`order_items`.`sale_price`), 0) AS `order_items.total_sale_price`
FROM
`thelook`.`orders` AS `orders`
INNER JOIN `thelook`.`users` AS `users` ON `orders`.`user_id` = `users`.`id`
INNER JOIN `thelook`.`order_items` AS `order_items` ON `orders`.`id` = `order_items`.`order_id`
GROUP BY
1
ORDER BY
2 DESC
LIMIT 500
Dalam contoh ini, COUNT(*) AS orders.count
menjadi COUNT(DISTINCT orders.id ) AS orders.count
. Looker mendeteksi bahwa ada kemungkinan situasi fanout dan otomatis menambahkan kata kunci SQL DISTINCT
ke fungsi SQL COUNT
.