LIFETIME (definida em segundos).
LIFETIME é o intervalo de atualização para dicionários totalmente carregados e o intervalo de invalidação para dicionários em cache.
Durante as atualizações, a versão antiga de um dicionário ainda pode ser consultada.
As atualizações de dicionários não bloqueiam consultas, exceto durante o carregamento inicial.
Se ocorrer um erro durante uma atualização, o erro será registrado no log do servidor, e as consultas poderão continuar usando a versão antiga do dicionário.
Se a atualização de um dicionário for bem-sucedida, a versão antiga do dicionário será substituída atomicamente.
Exemplo de configurações:
<lifetime>0</lifetime> (LIFETIME(0)) impede a atualização dos dicionários.
Você pode definir um intervalo de tempo para as atualizações, e o ClickHouse escolherá um instante aleatório com distribuição uniforme dentro desse intervalo. Isso é necessário para distribuir a carga na fonte do dicionário ao atualizar em um grande número de servidores.
Exemplo de configurações:
<min>0</min> e <max>0</max>, o ClickHouse não recarrega o dicionário por tempo limite.
Nesse caso, o ClickHouse pode recarregar o dicionário antes se o arquivo de configuração do dicionário tiver sido alterado ou se o comando SYSTEM RELOAD DICTIONARY tiver sido executado.
Ao atualizar os dicionários, o ClickHouse server aplica uma lógica diferente dependendo do tipo de fonte:
- Para um arquivo de texto, ele verifica o horário de modificação. Se esse horário for diferente do registrado anteriormente, o dicionário será atualizado.
- Por padrão, os dicionários de outras fontes são atualizados sempre.
- A tabela do dicionário deve ter um campo que sempre mude quando os dados da fonte forem atualizados.
- As configurações da fonte devem especificar uma consulta que recupere o campo variável. O ClickHouse server interpreta o resultado da consulta como uma linha e, se essa linha tiver mudado em relação ao estado anterior, o dicionário será atualizado. Especifique a consulta no campo
<invalidate_query>nas configurações da fonte.
Cache, ComplexKeyCache, SSDCache e SSDComplexKeyCache, são compatíveis tanto atualizações síncronas quanto assíncronas.
Também é possível que os dicionários Flat, Hashed, HashedArray e ComplexKeyHashed solicitem apenas os dados alterados desde a atualização anterior. Se update_field for especificado como parte da configuração da fonte do dicionário, o valor do horário da atualização anterior, em segundos, será adicionado à solicitação de dados. Dependendo do tipo de fonte (Executable, HTTP, MySQL, PostgreSQL, ClickHouse ou ODBC), uma lógica diferente será aplicada a update_field antes de solicitar dados de uma fonte externa.
- Se a fonte for HTTP,
update_fieldserá adicionado como um parâmetro de consulta, com o horário da última atualização como valor do parâmetro. - Se a fonte for Executable,
update_fieldserá adicionado como um argumento do script executável, com o horário da última atualização como valor do argumento. - Se a fonte for ClickHouse, MySQL, PostgreSQL ou ODBC, haverá uma parte adicional da cláusula
WHERE, na qualupdate_fieldserá comparado como maior ou igual ao horário da última atualização.- Por padrão, essa condição
WHEREé verificada no nível mais alto da consulta SQL. Como alternativa, a condição pode ser verificada em qualquer outra cláusulaWHEREdentro da consulta usando a palavra-chave{condition}. Exemplo:
- Por padrão, essa condição
update_field estiver definida, a opção adicional update_lag também poderá ser definida. O valor da opção update_lag é subtraído do horário da atualização anterior antes de solicitar os dados atualizados.
Exemplo de configurações: