2016-06-18 18 views
8

Tôi đã đi qua tài liệu cho Clickhouse và tôi không thấy tùy chọn CẬP NHẬT cũng như XÓA. Có vẻ như với tôi một hệ thống chỉ nối thêm của nó. Có khả năng cập nhật các bản ghi hiện có hoặc có một số giải pháp thay thế như cắt xén phân vùng có bản ghi trong đó đã thay đổi và sau đó chèn lại toàn bộ dữ liệu cho phân vùng đó không?Cập nhật dữ liệu trong Clickhouse

Trả lời

5

Bạn có thể thả và tạo các bảng mới, nhưng tùy thuộc vào kích thước của chúng, điều này có thể tốn rất nhiều thời gian. Bạn có thể làm một cái gì đó như thế này:

Để xóa, một cái gì đó như thế này có thể làm việc.

INSERT INTO tableTemp SELECT * from table1 WHERE rowID != @targetRowID; 
    DROP table1; 
    INSERT INTO table1 SELECT * from tableTemp; 

Tương tự, để cập nhật hàng, trước tiên bạn có thể xóa nó theo cách này và sau đó thêm nó.

+0

Nhưng làm cách nào tôi cập nhật một bảng rất lớn. Ví dụ, nếu quá trình của tôi là thu thập rất nhiều hồ sơ, sau đó "đúng" 15% trong số đó? – Jonathan

+1

Về cơ bản, chỉ cần cập nhật và xóa nhiều hàng? Trước tiên, bạn có thể chọn những hàng đó thành bảng tạm thời và chỉ thay đổi mệnh đề where thành 'WHERE rowID không có trong (SELECT rowID FROM targetTable') Bạn chỉ bị giới hạn ở đây bởi những gì bạn có thể chọn. – samdoj

+1

Sẽ hiệu quả hơn khi đổi tên bảng thay vì thực hiện 'INSERT INTO table1 SELECT * từ tableTemp;' –

9

ClickHouse không hỗ trợ UPDATE/DELETE thực. Nhưng có vài cách giải quyết có thể:

  1. Đang cố gắng để tổ chức dữ liệu theo một cách, đó là không cần phải được cập nhật. Bạn có thể ghi nhật ký các sự kiện cập nhật vào một bảng và sau đó tính toán các báo cáo từ nhật ký đó. Vì vậy, thay vì cập nhật các bản ghi hiện có, bạn thêm các bản ghi mới vào một bảng.

  2. Sử dụng công cụ bảng thực hiện chuyển đổi dữ liệu trong nền trong khi hợp nhất. Ví dụ, (chứ không phải cụ thể) CollapsingMergeTree cơ bảng: https://clickhouse.yandex/reference_en.html#CollapsingMergeTree Cũng có những động cơ bảng ReplacingMergeTree (không phải tài liệu nào, bạn có thể tìm thấy ví dụ trong các thử nghiệm: https://github.com/yandex/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00325_replacing_merge_tree.sql) Nhược điểm là bạn không biết, khi nền hợp nhất sẽ được thực hiện và sẽ bao giờ được thực hiện.

Ngoài ra hãy xem câu trả lời của samdoj.

Các vấn đề liên quan