# Auto-completions
> The dropdown that opens as you type. It knows where the cursor is in the statement, so the list matches the clause you're in.
Source: https://docs.querylab.io/writing-sql/auto-completions/
## Opening, accepting, dismissing
| Action | Key |
| ------- | ---------------------------------------------------------------------- |
| Open | Appears as you type; `Ctrl Space` opens it anywhere |
| Accept | `Tab` or `Enter` |
| Move | `↑` `↓` |
| Dismiss | `Esc` |
The list also opens after a dot, an opening paren, an operator, or a quote (see [value suggestions](https://docs.querylab.io/writing-sql/value-suggestions/)).
Ghost text does not show while the list is open. See [ghost completions](https://docs.querylab.io/writing-sql/ghost-completions/). With a ghost model on, a space does not open the list by itself; a letter or `Ctrl Space` does. You can change this under [Choosing a model](https://docs.querylab.io/writing-sql/ghost-completions/#choosing-a-model).
## What's in the list
The list changes with the clause the cursor is in. Each kind has its own icon and a short detail on the right.
### Keywords and phrases
Multi-word keywords complete as one item: `GRO` gives `GROUP BY`, `LEF` gives `LEFT JOIN`, `ORD` gives `ORDER BY`.
```sql
SELECT * FROM `ace-analytics.warehouse.events`
GRO
```
On an empty line the list starts with statement keywords, a `SELECT statement` snippet, and functions that match what you've typed:
### Tables
After `FROM` and `JOIN`: tables from the projects you've connected, as full `project.dataset.table` paths, plus CTEs defined earlier in the query. Type any part of the path to filter: `events` matches `ace-analytics.warehouse.events`. Dot-by-dot navigation through project → dataset → table is covered in [hierarchical completions](https://docs.querylab.io/writing-sql/hierarchical-completions/).
### Columns
Once a table is in the `FROM` clause, its columns appear in `SELECT`, `WHERE`, `GROUP BY`, `ORDER BY`, and `ON`. The detail shows the column's type.
```sql
SELECT * FROM `ace-analytics.warehouse.fact_mot_test` WHERE
```
No `FROM` yet means no columns. Write the `FROM` first, or use the ghost text after `SELECT` to fill it in.
### STRUCT fields and ARRAY elements
A dot after a STRUCT column lists its fields, one level per dot (see [hierarchical completions](https://docs.querylab.io/writing-sql/hierarchical-completions/#structs)). Without the dot, the list already includes two levels of nested fields (`device.category`, `geo.country`), so you can type `country` and let filtering find `geo.country`. After `UNNEST(event_params) AS p`, `p.` lists the element's fields.
### Functions and signature help
Functions complete with their parentheses. Typing `(` or `,` inside a call opens signature help with the current parameter in bold:
Gets the number of unit boundaries between two DATE values.{" "}
date_part: DAY, WEEK, MONTH, QUARTER, YEAR.
Namespaced functions chain the same way as tables: `ML.`, `SAFE.`, `NET.`, `AI.` each open their own list.
### Values
Inside a comparison (`WHERE country = '¦'`) the list holds real values from that column, sampled at no cost. That has its own page: [value suggestions](https://docs.querylab.io/writing-sql/value-suggestions/).
## Turning it off or tuning it
Settings → Editor → SQL Editor → Completions (also listed under [Settings](https://docs.querylab.io/settings/#sql-editor)).