Uso
explore: view_name_1 {
join: view_name_2 {
sql_where: ${view_name_1.id} < 100 ;;
}
}
explore: view_name_1 {
join: view_name_2 {
sql_where: ${view_name_1.id} < 100 ;;
}
}
|
Hierarchy
sql_where |
Default Value
None
Accepts
A SQL WHERE clause
|
sql_where lets you apply a query restriction that users cannot change. The restriction will be inserted into the WHERE clause of the underlying SQL that Looker generates if and only if the join is used in the query. In addition to queries run by human users, the restriction will apply to dashboards, scheduled Looks, and embedded information that relies on that Explore.
The condition can be written in pure SQL, using your database's actual table and column names. It can also use Looker field references like ${view_name.field_name}, which is the preferred method, because Looker can be smarter about automatically including necessary joins. A sql_where condition is not displayed to the user, unless they look at the underlying SQL of any queries that they create.
For example, you can specify that if the join to users is used, that only users younger than 50 should be included:
explore: orders_users_under_50 {
view_name: orders
join: users {
sql_on: ${users.id} = ${orders.user_id} ;;
sql_where: ${users.age} < 50 ;;
type: left_outer
}
}
Se o usuário selecionar Orders.Count e Users.Count, o SQL que o Looker geraria com base nesse LookML será:
SELECT
COUNT(orders.id) AS orders_count,
COUNT(DISTINCT users.id, 1000) AS users_count
FROM thelook2.orders AS orders
LEFT JOIN thelook2.users AS users ON users.id = orders.user_id
WHERE users.age < 50
LIMIT 500
OR.Se você usar a lógica OR com sql_where, é muito importante colocar parênteses na condição SQL. Por exemplo, em vez de escrever:
sql_where: region = 'Northeast' OR company = 'Altostrat' ;;
Você escreveria isto:
sql_where: (region = 'Northeast' OR company = 'Altostrat') ;;
Se você esquecer de adicionar os parênteses neste exemplo e um usuário adicionar o próprio filtro, a cláusula WHERE gerada poderá ter a seguinte forma:
WHERE
user_filter = 'something' AND
region = 'Northeast' OR
company = 'Altostrat'
Nessa situação, o filtro aplicado pelo usuário pode não funcionar. De qualquer forma, as linhas com company = 'Altostrat' vão aparecer, porque a condição AND é avaliada primeiro. Sem parênteses, apenas parte da condição sql_where é combinada com o filtro do usuário. Se parênteses fossem adicionados, a cláusula WHERE ficaria assim:
WHERE
user_filter = 'something' AND
(region = 'Northeast' OR company = 'Altostrat')
Agora, o filtro do usuário será aplicado a todas as linhas.
sql_whereEm geral, o Looker implementa junções na ordem correta, independente da ordem em que elas são definidas no LookML. A exceção é com sql_where. Se você fizer referência a um campo de outra junção na sua instrução sql_where, a junção referenciada precisará ser definida antes da instrução sql_where na LookML.
Por exemplo, esta é uma instrução sql_where que faz referência ao campo inventory_items.id antes de inventory_items ser unido:
explore: orders {
hidden: yes
join: order_items {
sql_on: ${order_items.order_id} = ${orders.id} ;;
sql_where: ${inventory_items.id} IS NOT NULL ;;
}
join: inventory_items {
sql_on: ${inventory_items.id}=${order_items.inventory_item_id} ;;
}
}
Se você executar uma consulta nessa Análise, o Looker vai retornar um erro informando que o campo inventory_items.id não foi encontrado.
No entanto, é possível resolver esse problema reordenando as junções para que a junção referenciada na instrução sql_where seja definida antes da instrução sql_where, assim:
explore: orders {
hidden: yes
join: inventory_items {
sql_on: ${inventory_items.id}=${order_items.inventory_item_id} ;;
}
join: order_items {
sql_on: ${order_items.order_id} = ${orders.id} ;;
sql_where: ${inventory_items.id} IS NOT NULL ;;
}
}
Isso evita o erro porque a junção inventory_items é definida antes que o campo inventory_items.id seja referenciado na instrução sql_where da junção order_items.
sql_where só é aplicada se a junção for usada.A restrição de consulta especificada em sql_where será inserida na cláusula WHERE do SQL subjacente que o Looker gera se e somente se a junção for usada na consulta. Se você quiser aplicar uma cláusula "where" mesmo que a junção não tenha sido usada, use sql_always_where.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2026-02-05 UTC.