Tenho uma tabela ClickHouse que contém o seguinte esquema:
`Start` DateTime64(9),
`End` DateTime64(9),
`Duration` Int64 DEFAULT toInt64((toDecimal64(End, 9) - toDecimal64(Start, 9)) * 1000000000),
Start
e End
são DateTime64(9)
campos com precisão de nanossegundos, e também preciso armazenar a diferença entre eles em um Duration
campo que gostaria que o ClickHouse gerasse automaticamente. Tive problemas para encontrar a melhor maneira de converter DateTime64(9)
campos em carimbos de data e hora de época de nanossegundos e, eventualmente, criei uma solução que os converte em decimais e multiplica por uma constante para fornecer a diferença em nanossegundos como um número inteiro.
Isso funciona, parece que estou obtendo os Duration
valores corretos, mas a * 1000000000
parte me parece um cheiro. Existe uma maneira melhor de fazer isso que eu não conheço? Examinei as funções de data do ClickHouse e não consegui encontrar nenhuma que lidasse com precisão de nanossegundos, apenas toUnixTimestamp()
com precisão de segundos.
Existem algumas funções específicas do nano (que não puderam ser referenciadas nos documentos), vamos observá-las para ClickHouse versão 22.8.15.23 :
Este deve funcionar para você: