Sama seperti di SQL, join di LookML digunakan untuk menggabungkan baris dari dua tabel atau lebih, berdasarkan kolom terkait di antara keduanya.
Di LookML, Jelajahi — seperti yang ditentukan oleh parameter LookML explore
— digunakan untuk menentukan cara pengguna dapat membuat kueri data. Eksplorasi terdiri dari setidaknya satu tampilan atau sekumpulan tampilan yang digabungkan. Tampilan utama di Jelajah selalu disertakan dalam kueri. Tampilan yang digabungkan 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 yang tersedia di database, dan cara mengaksesnya.
Contoh berikut adalah definisi untuk orders
Jelajahi.
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 Jelajahi, 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 di database, perubahan tersebut hanya perlu dilakukan di satu tempat.
Parameter relationship
penting. Join dapat menyebabkan masalah fanout saat baris diduplikasi. Dengan menentukan bahwa banyak pesanan akan bergabung hanya ke satu pengguna, Looker akan mengenali bahwa fanout tidak akan terjadi dari join ini, sehingga penanganan khusus tidak diperlukan. Namun, hubungan one_to_many
dapat memicu fanout.
Pembuatan tampilan dan Jelajah secara otomatis ditetapkan secara default ke left outer join. Namun, dalam contoh sebelumnya, kemungkinan besar setiap pesanan akan memiliki tepat satu pengguna, sehingga join dalam contoh ini dapat berupa join dalam.
Untuk melihat SQL yang dihasilkan dari Jelajah, Anda dapat menjalankan Jelajah di UI, lalu memilih tab SQL di panel Data.
Misalnya, jika Anda membuka Jelajah Pesanan, yang telah 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. Hal ini hanya dilakukan jika diperlukan.
Jika Anda menghapus dimensi User ID dan menambahkan dimensi ID dari tampilan Users, 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, penggabungan akan disertakan.
Contoh berikut menunjukkan LookML dalam file Jelajahi orders
, yang ditentukan sebelumnya, dan menambahkan join 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 Jelajah Pesanan di UI, Anda akan melihat tampilan Item Pesanan. Jika Anda memilih ukuran Total Sale Price dari tampilan Order Items beserta Count dari Orders dan ID dari Users, 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
.