Ho esaminato la documentazione di Clickhouse e non ho visto l'opzione AGGIORNAMENTO né ELIMINA. Mi sembra un sistema solo append. Esiste la possibilità di aggiornare i record esistenti o c'è qualche soluzione alternativa come il troncamento di una partizione con i record che sono stati modificati e quindi reinserire l'intero dato per quella partizione?Aggiornamento dei dati in Clickhouse
risposta
È possibile rilasciare e creare nuove tabelle, ma a seconda delle dimensioni questo potrebbe richiedere molto tempo. Si potrebbe fare qualcosa del genere:
Per la cancellazione, qualcosa del genere potrebbe funzionare.
INSERT INTO tableTemp SELECT * from table1 WHERE rowID != @targetRowID;
DROP table1;
INSERT INTO table1 SELECT * from tableTemp;
Analogamente, per aggiornare una riga, è possibile prima eliminarla in questo modo e quindi aggiungerla.
ClickHouse non supporta l'effettivo AGGIORNAMENTO/ELIMINAZIONE. ma ci sono alcune soluzioni possibili:
Cercando di organizzare i dati in un modo, cioè non ha bisogno di essere aggiornato. È possibile scrivere il registro degli eventi di aggiornamento in una tabella e quindi calcolare i report da tale registro. Quindi, invece di aggiornare i record esistenti, aggiungi nuovi record a una tabella.
Utilizzo del motore di tabella che esegue la trasformazione dei dati in background durante le unioni. Ad esempio, (piuttosto specifico) motore di tabella CollapsingMergeTree: https://clickhouse.yandex/reference_en.html#CollapsingMergeTree Inoltre, esiste un motore di tabella ReplacingMergeTree (non ancora documentato, è possibile trovare un esempio nei test: https://github.com/yandex/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00325_replacing_merge_tree.sql) Lo svantaggio è che non si sa, quando sarà eseguita l'unione di sfondo e sarà mai fatto.
Guarda anche la risposta di samdoj.
- 1. Aggiornamento dei dati nidificati nell'archivio di ridondanza
- 2. Aggiornamento dei dati utente registrati nella sessione
- 3. tabella di aggiornamento l'inserimento dei dati VARBINARY
- 4. D3: aggiornamento dei dati con più elementi in un gruppo
- 5. Aggiornamento dati stripe-importo
- 6. Aggiornamento dati in Slick Grid
- 7. Ciclo attraverso database sul server e aggiornamento dei dati
- 8. indice di aggiornamento dopo l'ordinamento dei dati-frame
- 9. Aggiornamento dei dati di allenamento per l'apprendimento supervisionato - come?
- 10. Come migliorare le prestazioni di inserimento/aggiornamento dei dati?
- 11. Aggiornamento dei plugin Gulp
- 12. Piano di aggiornamento dei costi in Stripe
- 13. prendendo e aggiornamento dati in mnesia
- 14. Aggiornamento dei file di stasi
- 15. Accesso ai dati dei dati dei moduli
- 16. Aggiornamento dell'origine dati Kendo ui?
- 17. OpenGL VBO dati di aggiornamento
- 18. aggiornamento grafico dai dati JSON
- 19. Reporting Services Cscading Aggiornamento dei parametri
- 20. Persistenza dei dati in elm
- 21. Caching dei dati in ASP.Net
- 22. Annotazioni dei dati in Swagger
- 23. persistenza dei dati in HTML5
- 24. Conservazione dei dati in memoria
- 25. Aggiornamento semplice di dati booleani con mongdb?
- 26. Tempo di aggiornamento Android dati della zona
- 27. Magento: aggiornamento dei cataloghi dei prodotti più veloce
- 28. Aggiornamento dei risultati di una istruzione SELECT
- 29. Aggiornamento dei valori N migliori con PostgreSQL
- 30. Gestione aggiornamento Rpm dei file di configurazione
Ma come aggiornare una tabella molto grande. Per esempio, cosa succede se il mio processo è stato quello di raccogliere molti record, quindi "correggere" il 15% di essi? – Jonathan
Fondamentalmente basta aggiornare ed eliminare più righe? È possibile innanzitutto selezionare tali righe in una tabella temporanea e modificare semplicemente la clausola where come 'WHERE rowID non è in (SELECT rowID FROM targetTable') Qui si limita a ciò che è possibile selezionare. – samdoj
Sarebbe molto più efficiente rinominare la tabella invece di fare 'INSERT INTO table1 SELECT * da tableTemp;' –