Gabungan memungkinkan Anda menghubungkan tampilan yang berbeda sehingga Anda dapat menjelajahi data dari beberapa tampilan sekaligus dan melihat bagaimana bagian yang berbeda dari data Anda saling terkait.
Misalnya, database Anda mungkin menyertakan tabel order_items
, orders
, dan users
. Anda dapat menggunakan {i>join<i} untuk menjelajahi data dari semua tabel secara bersamaan. Halaman ini menjelaskan gabungan di LookML, termasuk parameter gabungan dan pola penggabungan tertentu.
Bergabung dengan Explore dimulai dengan Explore
Gabungan ditentukan dalam file model untuk menetapkan hubungan antara Jelajah dan tampilan. Gabungan menghubungkan satu atau beberapa tampilan ke satu Jelajah, baik secara langsung maupun melalui tampilan gabungan lainnya.
Mari kita pertimbangkan dua tabel database: order_items
dan orders
. Setelah membuat tampilan untuk kedua tabel, deklarasikan satu atau beberapa tabel di bagian parameter explore
di file model:
explore: order_items { ... }
Saat Anda menjalankan kueri dari Jelajah order_items
, order_items
akan muncul dalam klausa FROM
dari SQL yang dihasilkan:
SELECT ...
FROM order_items
Anda dapat bergabung dengan informasi tambahan ke Jelajah order_items
. Misalnya, Anda dapat menggunakan contoh LookML berikut untuk menggabungkan tampilan orders
ke Jelajah order_items
:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
}
LookML di atas menyelesaikan dua hal. Pertama, Anda dapat melihat kolom dari orders
dan order_items
di UI:
Kedua, LookML menjelaskan cara menggabungkan orders
dan order_items
. LookML itu akan diterjemahkan ke SQL berikut:
SELECT ...
FROM order_items
LEFT JOIN orders
ON order_items.order_id = orders.id
Parameter LookML ini dijelaskan secara lebih mendetail di bagian berikut. Lihat halaman referensi parameter join
untuk mempelajari lebih lanjut bagaimana LookML ini diterjemahkan ke dalam SQL.
Tips Tim Chat: Pengguna bertanya lebih banyak tentang error validasi, "Kolom tidak diketahui atau tidak dapat diakses", yang dapat disebabkan oleh tidak adanya penggabungan. Lihat halaman Praktik Terbaik tentang error ini untuk informasi selengkapnya.
Parameter join
Empat parameter utama digunakan untuk menggabungkan: join
, type
, relationship
, dan sql_on
.
Langkah 1: Memulai Jelajah
Pertama, buat Jelajah order_items
:
explore: order_items { ... }
Langkah 2: join
Untuk bergabung ke tabel, Anda harus mendeklarasikannya terlebih dahulu dalam tampilan. Dalam contoh ini, orders
adalah tampilan yang sudah ada di model Anda.
Kemudian, gunakan parameter join
untuk mendeklarasikan bahwa Anda ingin menggabungkan tampilan orders
ke order_items
:
explore: order_items {
join: orders { ... }
}
Langkah 3: type
Pertimbangkan type
gabungan yang akan dijalankan. Looker mendukung LEFT JOIN
, INNER JOIN
, FULL OUTER JOIN
, dan CROSS JOIN
. Keduanya sesuai dengan nilai parameter type
dari left_outer
, inner
, full_outer
, dan cross
.
explore: order_items {
join: orders {
type: left_outer
}
}
Nilai default type
adalah left_outer
, dan umumnya merupakan jenis gabungan yang populer.
Langkah 4: relationship
Tentukan gabungan relationship
antara order_items
dan orders
. Mendeklarasikan relationship
gabungan dengan benar sangat penting bagi Looker untuk menghitung ukuran yang akurat. Hubungan ditentukan dari Jelajah order_items
hingga tampilan orders
. Opsi yang mungkin adalah one_to_one
, many_to_one
, one_to_many
, dan many_to_many
.
Dalam contoh ini, bisa ada banyak order_items
untuk satu order
. Hubungan dari order_items
dengan orders
adalah many_to_one
:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
}
}
Jika Anda tidak menyertakan relationship
dalam gabungan, Looker akan ditetapkan secara default ke many_to_one
.
Untuk tips tambahan tentang cara menentukan parameter relationship
dengan benar untuk gabungan, lihat halaman Menyiapkan parameter relationship
dengan benar.
Langkah 5: sql_on
Deklarasikan cara menggabungkan kedua tabel ini dengan parameter sql_on
atau foreign_key
. Kami biasanya menyarankan sql_on
karena dapat melakukan apa saja yang dapat dilakukan foreign_key
, tetapi biasanya lebih mudah dipahami.
sql_on
setara dengan klausa ON
dalam SQL yang dihasilkan untuk suatu kueri. Dengan parameter ini, kita dapat mendeklarasikan kolom mana yang harus dicocokkan untuk melakukan penggabungan:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
}
Anda juga dapat menulis {i>join<i} yang lebih kompleks. Misalnya, Anda mungkin hanya ingin bergabung ke pesanan dengan id
yang lebih besar dari 1.000:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} AND ${orders.id} > 1000 ;;
}
}
Lihat operator substitusi untuk mempelajari lebih lanjut sintaksis ${ ... }
dalam contoh berikut.
Langkah 6: Pengujian
Uji apakah gabungan ini berfungsi seperti yang diharapkan dengan membuka Eksplorasi Order Items. Anda akan melihat kolom dari order_items
dan orders
.
Lihat Pengembangan Model untuk mempelajari lebih lanjut cara menguji perubahan LookML.
Bergabung melalui tampilan lain
Anda dapat menggabungkan tampilan ke Jelajah melalui tampilan lain. Pada contoh di atas, Anda menggabungkan orders
ke order_items
melalui kolom order_id
. Kita mungkin juga ingin menggabungkan data dari tampilan yang disebut users
ke Jelajah order_items
, meskipun tampilan tersebut tidak menggunakan kolom yang sama. Hal ini dapat dilakukan dengan bergabung melalui tampilan orders
.
Gunakan sql_on
atau foreign_key
untuk bergabung dengan users
ke orders
, bukan order_items
. Lakukan hal ini dengan mencakup kolom dengan benar dari orders
sebagai orders.user_id
.
Berikut adalah contoh penggunaan sql_on
:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
join: users {
type: left_outer
relationship: many_to_one
sql_on: ${orders.user_id} = ${users.id} ;;
}
}
Bergabung ke tampilan lebih dari sekali
Tampilan users
berisi data untuk pembeli dan penjual. Untuk menggabungkan data dari tampilan ini ke order_items
, tetapi melakukannya secara terpisah untuk pembeli dan penjual, Anda dapat menggabungkan users
dua kali, dengan nama yang berbeda, menggunakan parameter from
.
Parameter from
memungkinkan Anda menentukan tampilan yang akan digunakan dalam gabungan, sekaligus memberikan nama unik untuk gabungan tersebut. Contoh:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
}
join: buyers {
from: users
type: left_outer
relationship: many_to_one
sql_on: ${orders.buyer_id} = ${buyers.id} ;;
}
join: sellers {
from: users
type: left_outer
relationship: many_to_one
sql_on: ${orders.seller_id} = ${sellers.id} ;;
}
}
Dalam hal ini, hanya data pembeli yang digabungkan sebagai buyers
, sedangkan hanya data penjual yang digabungkan sebagai sellers
.
Catatan: Tampilan users
sekarang harus dirujuk oleh nama alias buyers
dan sellers
di gabungan.
Membatasi kolom dari gabungan
Parameter fields
memungkinkan Anda menentukan kolom mana yang dibawa dari gabungan ke Jelajah. Secara default, semua kolom dari tampilan dibawa saat digabungkan. Namun, Anda mungkin hanya ingin menggunakan subkumpulan kolom.
Misalnya, saat orders
digabungkan ke order_items
, Anda mungkin hanya ingin memindahkan kolom shipping
dan tax
melalui gabungan:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
fields: [shipping, tax]
}
}
Anda juga dapat mereferensikan sekumpulan kolom, seperti [set_a*]
. Setiap kumpulan ditentukan dalam tampilan menggunakan parameter set
. Misalkan Anda memiliki kumpulan berikut yang ditentukan dalam tampilan orders
:
set: orders_set {
fields: [created_date, shipping, tax]
}
Anda dapat memilih untuk hanya memindahkan tiga kolom ini saat bergabung dengan orders
ke order_items
:
explore: order_items {
join: orders {
type: left_outer
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id} ;;
fields: [orders_set*]
}
}
Agregat simetris
Looker menggunakan fitur yang disebut "agregat simetris" untuk menghitung agregasi (seperti jumlah dan rata-rata) dengan benar, bahkan saat penggabungan menghasilkan fanout. Agregat simetris dijelaskan secara lebih mendetail di halaman Praktik Terbaik Memahami agregat simetris, dan masalah fanout yang diatasi dijelaskan dalam Postingan komunitas Masalah fanout SQL.
Kunci utama wajib diisi
Agar ukuran (agregasi) dihasilkan melalui gabungan, Anda harus menentukan kunci utama di semua tampilan yang terlibat dalam penggabungan.
Lakukan hal ini dengan menambahkan parameter primary_key
ke definisi kolom kunci utama di setiap tampilan:
dimension: id {
type: number
primary_key: yes
}
Untuk menangani tindakan gabungan dengan benar, Looker mengandalkan kunci utama dengan nilai yang benar-benar unik dan memiliki nilai non-NULL. Jika data Anda tidak berisi kunci utama, pertimbangkan apakah penggabungan beberapa kolom akan menghasilkan kunci utama dengan nilai non-NULL yang benar-benar unik. Jika kunci utama Anda tidak unik atau berisi nilai NULL dan kueri Anda menyertakan data yang mengungkapkan masalah tersebut, Looker akan menampilkan error seperti yang dijelaskan pada halaman Error: Non-Unique value/primary key (atau sql_distinct_key), value overflow, atau collision when computing sum.
Dialek SQL yang didukung
Agar Looker dapat mendukung penggabungan simetris dalam project Looker, dialek database Anda juga harus mendukungnya. Tabel berikut menunjukkan dialek mana yang mendukung agregat simetris dalam rilis Looker terbaru:
Dialek | Didukung? |
---|---|
Actian Avalanche | Ya |
Amazon Athena | Ya |
Amazon Aurora MySQL | Ya |
Amazon Redshift | Ya |
Apache Druid | Tidak |
Apache Druid 0.13+ | Tidak |
Apache Druid 0.18+ | Tidak |
Apache Hive 2.3 dan yang lebih baru | Tidak |
Apache Hive 3.1.2+ | Tidak |
Apache Spark 3+ | Ya |
ClickHouse | Tidak |
Cloudera Impala 3.1+ | Ya |
Cloudera Impala 3.1+ dengan Native Driver | Ya |
Cloudera Impala dengan Native Driver | Tidak |
DataVirtuality | Ya |
Databricks | Ya |
Denodo 7 | Ya |
Denodo 8 | Ya |
Dremio | Tidak |
Dremio 11+ | Ya |
Exasol | Ya |
Firebolt | Ya |
Legacy SQL Google BigQuery | Ya |
SQL Standar Google BigQuery | Ya |
PostgreSQL Google Cloud | Ya |
Google Cloud SQL | Ya |
Google Spanner | Ya |
Greenplum | Ya |
HyperSQL | Tidak |
IBM Netezza | Ya |
MariaDB | Ya |
Microsoft Azure PostgreSQL | Ya |
Microsoft Azure SQL Database | Ya |
Microsoft Azure Synapse Analytics | Ya |
Microsoft SQL Server 2008+ | Ya |
Microsoft SQL Server 2012+ | Ya |
Microsoft SQL Server 2016 | Ya |
Microsoft SQL Server 2017+ | Ya |
MongoBI | Tidak |
MySQL | Ya |
MySQL 8.0.12+ | Ya |
Oracle | Ya |
Oracle ADWC | Ya |
PostgreSQL 9.5+ | Ya |
PostgreSQL versi 9.5 | Ya |
PrestoDB | Ya |
PrestoSQL | Ya |
SAP HANA | Ya |
SAP HANA 2+ | Ya |
SingleStore | Ya |
SingleStore 7+ | Ya |
Snowflake | Ya |
Teradata | Ya |
Trino | Ya |
Vector | Ya |
Vertica | Ya |
Jika dialek Anda tidak mendukung agregat simetris, berhati-hatilah saat mengeksekusi gabungan di Looker, karena beberapa jenis gabungan dapat menghasilkan agregasi yang tidak akurat (seperti jumlah dan rata-rata). Masalah ini dan solusi untuknya dijelaskan dengan sangat mendetail di Postingan komunitas Masalah fanout SQL.
Pelajari lebih lanjut
Untuk mempelajari lebih lanjut parameter gabungan di LookML, lihat dokumentasi Referensi gabungan.