نظرة عامة
تتيح لك عبارة REPLACE تحديث جدول بشكل ذري.
عادةً، إذا احتجت إلى حذف بعض البيانات من جدول،
يمكنك إنشاء جدول جديد وملؤه باستخدام عبارة SELECT لا تسترجع البيانات غير المرغوب فيها،
ثم إسقاط الجدول القديم وإعادة تسمية الجدول الجديد.
يوضّح المثال أدناه هذا النهج:
CREATE TABLE myNewTable AS myOldTable;
INSERT INTO myNewTable
SELECT * FROM myOldTable
WHERE CounterID <12345;
DROP TABLE myOldTable;
RENAME TABLE myNewTable TO myOldTable;بدلاً من النهج المذكور أعلاه، يمكنك أيضاً استخدام REPLACE (إذا كنت تستخدم محركات قواعد البيانات الافتراضية) لتحقيق النتيجة نفسها:
REPLACE TABLE myOldTable
ENGINE = MergeTree()
ORDER BY CounterID
AS
SELECT * FROM myOldTable
WHERE CounterID <12345;الصياغة
{CREATE [OR REPLACE] | REPLACE} TABLE [db.]table_nameأمثلة
لنأخذ الجدول التالي:
CREATE DATABASE base
ENGINE = Atomic;
CREATE OR REPLACE TABLE base.t1
(
n UInt64,
s String
)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (1, 'test');
SELECT * FROM base.t1;
┌يمكننا استخدام عبارة REPLACE لمسح جميع البيانات:
CREATE OR REPLACE TABLE base.t1
(
n UInt64,
s Nullable(String)
)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (2, null);
SELECT * FROM base.t1;
┌أو يمكننا استخدام عبارة REPLACE لتغيير بنية الجدول:
REPLACE TABLE base.t1 (n UInt64)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (3);
SELECT * FROM base.t1;
┌لنأخذ الجدول التالي على ClickHouse Cloud:
CREATE DATABASE base;
CREATE OR REPLACE TABLE base.t1
(
n UInt64,
s String
)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (1, 'test');
SELECT * FROM base.t1;
1 testيمكننا استخدام عبارة REPLACE لمسح جميع البيانات:
CREATE OR REPLACE TABLE base.t1
(
n UInt64,
s Nullable(String)
)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (2, null);
SELECT * FROM base.t1;
2أو يمكننا استخدام عبارة REPLACE لتغيير بنية الجدول:
REPLACE TABLE base.t1 (n UInt64)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (3);
SELECT * FROM base.t1;
3