Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Atributos do Dicionário

A cláusula structure descreve a chave do dicionário e os campos disponíveis para consultas.

Descrição em XML:

<dictionary>
    <structure>
        <id>
            <name>Id</name>
        </id>

        <attribute>
            <!-- Parâmetros de atributo -->
        </attribute>

        ...

    </structure>
</dictionary>

Os atributos são descritos nos elementos:

  • <id> — coluna-chave
  • <attribute> — coluna de dados: pode haver vários atributos.

Consulta DDL:

CREATE DICTIONARY dict_name (
    Id UInt64,
    -- atributos
)
PRIMARY KEY Id
...

Os atributos são descritos no corpo da consulta:

  • PRIMARY KEY — coluna-chave
  • AttrName AttrType — coluna de dados. Pode haver vários atributos.

Chave

O ClickHouse oferece suporte aos seguintes tipos de chaves:

  • Chave numérica. UInt64. Definida na tag <id> ou com a palavra-chave PRIMARY KEY.
  • Chave composta. Conjunto de valores de tipos diferentes. Definida na tag <key> ou com a palavra-chave PRIMARY KEY.

Uma estrutura XML pode conter <id> ou <key>. A consulta DDL deve conter uma única PRIMARY KEY.

Chave numérica

Tipo: UInt64.

Exemplo de configuração:

<id>
    <name>Id</name>
</id>

Campos de configuração:

  • name – O nome da coluna que contém as chaves.

Para a consulta DDL:

CREATE DICTIONARY (
    Id UInt64,
    ...
)
PRIMARY KEY Id
...
  • PRIMARY KEY – O nome da coluna que contém as chaves.

Chave composta

A chave pode ser uma tuple formada por campos de qualquer tipo. O layout nesse caso deve ser complex_key_hashed ou complex_key_cache.

A estrutura da chave é definida no elemento <key>. Os campos da chave são especificados no mesmo formato dos atributos do dicionário. Exemplo:

<structure>
    <key>
        <attribute>
            <name>field1</name>
            <type>String</type>
        </attribute>
        <attribute>
            <name>field2</name>
            <type>UInt32</type>
        </attribute>
        ...
    </key>
...

ou

CREATE DICTIONARY (
    field1 String,
    field2 UInt32
    ...
)
PRIMARY KEY field1, field2
...

Para uma consulta à função dictGet*, uma tupla é usada como chave. Exemplo: dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2)).

Quando a chave composta consiste em um único atributo, o valor da chave pode ser passado diretamente, sem encapsulá-lo em tuple. Por exemplo, tanto dictGetString('dict_name', 'attr_name', 'key') quanto dictGetString('dict_name', 'attr_name', tuple('key')) são válidos.

Atributos

Exemplo de configuração:

<structure>
    ...
    <attribute>
        <name>Name</name>
        <type>ClickHouseDataType</type>
        <null_value></null_value>
        <expression>rand64()</expression>
        <hierarchical>true</hierarchical>
        <injective>true</injective>
        <is_object_id>true</is_object_id>
    </attribute>
</structure>

or

CREATE DICTIONARY somename (
    Name ClickHouseDataType DEFAULT '' EXPRESSION rand64() HIERARCHICAL INJECTIVE IS_OBJECT_ID
)

Campos de configuração:

Tag Descrição Obrigatório
name Nome da coluna. Sim
type Tipo de dado do ClickHouse: UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32, Float64, UUID, Decimal32, Decimal64, Decimal128, Decimal256,Date, Date32, DateTime, DateTime64, String, Array.
O ClickHouse tenta converter o valor do dicionário para o tipo de dado especificado. Por exemplo, no MySQL, o campo pode ser TEXT, VARCHAR ou BLOB na tabela de origem do MySQL, mas pode ser carregado como String no ClickHouse.
Atualmente, Nullable é compatível com os dicionários Flat, Hashed, ComplexKeyHashed, Direct, ComplexKeyDirect, RangeHashed, Polygon, Cache, ComplexKeyCache, SSDCache, SSDComplexKeyCache. Em dicionários IPTrie, tipos Nullable não são compatíveis.
Sim
null_value Valor padrão para um elemento inexistente.
No exemplo, é uma string vazia. O valor NULL só pode ser usado com tipos Nullable (veja a linha anterior com a descrição dos tipos).
Sim
expression Expressão que o ClickHouse executa sobre o valor.
A expressão pode ser um nome de coluna no banco de dados SQL remoto. Assim, você pode usá-la para criar um alias para a coluna remota.

Valor padrão: nenhuma expressão.
Não
hierarchical Se true, o atributo contém o valor da chave pai da chave atual. Veja Hierarchical Dictionaries.

Valor padrão: false.
Não
injective Flag que indica se o mapeamento id -> attribute é injetivo.
Se true, o ClickHouse pode colocar automaticamente, após a cláusula GROUP BY, as consultas aos dicionários com injetividade. Em geral, isso reduz significativamente a quantidade dessas consultas.

Valor padrão: false.
Não
is_object_id Flag que indica se a consulta é executada para um documento do MongoDB por ObjectID.

Valor padrão: false.
Navigation