> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Criando tabelas no ClickHouse

> Saiba mais sobre como criar tabelas no ClickHouse

<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>

<div className="mt-2 flex flex-wrap gap-2">
  <Badge size="lg" color="blue">Analytics em tempo real</Badge>
  <Badge size="lg" color="blue">Armazenamento de dados</Badge>
  <Badge size="lg" color="blue">Observabilidade</Badge>
  <Badge size="lg" color="blue">AI/ML</Badge>
  <Badge size="lg" color="orange">OSS</Badge>
</div>

Como a maioria dos bancos de dados, o ClickHouse agrupa logicamente as tabelas em **bancos de dados**. Use o comando `CREATE DATABASE` para criar um novo **banco de dados** no ClickHouse:

```sql theme={null}
CREATE DATABASE IF NOT EXISTS helloworld
```

Da mesma forma, use `CREATE TABLE` para definir uma nova tabela. Se você não especificar o nome do banco de dados, a tabela será criada no banco de dados
`default`.

A tabela a seguir, chamada `my_first_table`, é criada no banco de dados `helloworld`:

```sql theme={null}
  CREATE TABLE helloworld.my_first_table
  (
      user_id UInt32,
      message String,
      timestamp DateTime,
      metric Float32
  )
  ENGINE = MergeTree()
  PRIMARY KEY (user_id, timestamp)
```

No exemplo acima, `my_first_table` é uma tabela `MergeTree` com quatro colunas:

* `user_id`: um inteiro sem sinal de 32 bits
* `message`: um tipo de dado `String`, que substitui tipos como `VARCHAR`, `BLOB`, `CLOB` e outros usados em outros sistemas de banco de dados
* `timestamp`: um valor `DateTime`, que representa um instante no tempo
* `metric`: um número de ponto flutuante de 32 bits

<Note>
  O motor da tabela determina:

  * Como e onde os dados são armazenados
  * Quais consultas são suportadas
  * Se os dados são replicados ou não

  Há muitos motores à disposição, mas, para uma tabela simples em um servidor ClickHouse de nó único, [MergeTree](/pt-BR/reference/engines/table-engines/mergetree-family/mergetree) provavelmente será a escolha mais adequada.
</Note>

<div id="a-brief-intro-to-primary-keys">
  ## Uma breve introdução às chaves primárias
</div>

Antes de prosseguir, é importante entender como as chaves primárias funcionam no ClickHouse (a implementação
das chaves primárias pode parecer inesperada!):

* as chaves primárias no ClickHouse ***não são únicas*** para cada linha de uma tabela

A chave primária de uma tabela do ClickHouse determina como os dados são ordenados quando gravados em disco. A cada 8.192 linhas ou 10 MB de
dados (o que chamamos de **granularidade do índice**), é criada uma entrada no arquivo de índice da chave primária. Esse conceito de granularidade
cria um **índice esparso** que cabe facilmente na memória, e os grânulos representam uma faixa com a menor quantidade de
dados de coluna processada durante consultas `SELECT`.

A chave primária pode ser definida usando o parâmetro `PRIMARY KEY`. Se você definir uma tabela sem especificar uma `PRIMARY KEY`,
a chave passa a ser a tupla especificada na cláusula `ORDER BY`. Se você especificar tanto uma `PRIMARY KEY` quanto uma `ORDER BY`, a chave primária deverá ser um prefixo da ordenação.

A chave primária também é a chave de ordenação, que é uma tupla de `(user_id, timestamp)`. Portanto, os dados armazenados em cada
arquivo de coluna serão ordenados por `user_id` e, em seguida, por `timestamp`.

<Tip>
  Para mais detalhes, confira o [módulo de treinamento Modeling Data](https://learn.clickhouse.com/visitor_catalog_class/show/1328860/?utm_source=clickhouse\&utm_medium=docs) na ClickHouse Academy.
</Tip>

<div className="mt-8">
  <a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
