Изменение данных через загрузку
Таблицы с Primary Key, предоставляемые Selena, позволяют вносить изменения в данные таблиц Selena, выполняя задачи Stream Load, Broker Load или Routine Load. Эти изменения данных включают вставки, обновления и удаления. Однако таблицы с Primary Key не поддерживают изменение данных с использованием Spark Load или INSERT.
Selena также поддерживает частичные обновления и условные обновления.
Вы можете загружать данные в таблицы Selena только как пользователь, имеющий привилегию INSERT на эти таблицы Selena. Если у вас нет привилегии INSERT, следуйте инструкциям в разделе GRANT, чтобы предоставить привилегию INSERT пользователю, которого вы используете для подключения к вашему cluster Selena. Синтаксис: GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>}.
В этом разделе используются данные CSV в качестве примера для описания того, как вносить изменения в данные таблицы Selena через загрузку. Поддерживаемые форматы файлов данных зависят от выбранного вами метода загрузки.
ПРИМЕЧАНИЕ
Для данных CSV вы можете использовать строку UTF-8, такую как запятая (,), табуляция или вертикальная черта (|), длиной не более 50 байт в качестве текстового разделителя.
Реализация
Таблицы с Primary Key, предоставляемые Selena, поддерживают операции UPSERT и DELETE и не различают операции INSERT от операций UPDATE.
При создании задачи загрузки Selena поддерживает добавление поля с именем __op в команду или оператор создания задачи. Поле __op используется для указания типа операции, которую вы хотите выполнить.
ПРИМЕЧАНИЕ
При создании таблицы вам не нужно добавлять столбец с именем
__opв эту таблицу.
Метод определения поля __op зависит от выбранного вами метода загрузки:
-
Если вы выбираете Stream Load, определите поле
__opс помощью параметраcolumns. -
Если вы выбираете Broker Load, определите поле
__opс помощью предложения SET. -
Если вы выбираете Routine Load, определите поле
__opс помощью столбцаCOLUMNS.
Вы можете решить, добавлять ли поле __op, в зависимости от изменений данных, которые вы хотите внести. Если вы не добавляете поле __op, тип операции по умолчанию — UPSERT. Основные сценарии изменения данных следующие:
-
Если файл данных, который вы хотите загрузить, включает только операции UPSERT, вам не нужно добавлять поле
__op. -
Если файл данных, который вы хотите загрузить, включает только операции DELETE, вы должны добавить поле
__opи указать тип операции как DELETE. -
Если файл данных, который вы хотите загрузить, включает как операции UPSERT, так и DELETE, вы должны добавить поле
__opи убедиться, что файл данных содержит столбец со значениями0или1. Значение0указывает на операцию UPSERT, а значение1указывает на операцию DELETE.
Примечания по использованию
-
Убедитесь, что каждая строка в вашем файле данных имеет одинаковое количество столбцов.
-
Столбцы, в которые вносятся изменения данных, должны включать столбец первичного ключа.
Базовые операции
В этом разделе приведены примеры того, как вносить изменения в данные таблицы Selena через загрузку. Для получения подробного синтаксиса и описания параметров см. STREAM LOAD, BROKER LOAD и CREATE ROUTINE LOAD.
UPSERT
Если файл данных, который вы хотите загрузить, включает только операции UPSERT, вам не нужно добавлять поле __op.
ПРИМЕЧАНИЕ
Если вы добавляете поле
__op:
Вы можете указать тип операции как UPSERT.
Вы можете оставить поле
__opпустым, поск ольку тип операции по умолчанию — UPSERT.
Примеры данных
-
Подготовьте файл данных.
a. Создайте CSV-файл с именем
example1.csvв вашей локальной файловой системе. Файл состоит из трёх столбцов, которые представляют идентификатор пользователя, имя пользователя и оценку пользователя соответственно.101,Lily,100
102,Rose,100b. Опубликуйте данные
example1.csvвtopic1вашего cluster Kafka. -
Подготовьте таблицу Selena.
a. Создайте таблицу с Primary Key с именем
table1в вашей базе данных Selenatest_db. Таблица состоит из трёх столбцов:id,nameиscore, из которыхidявляется первичным ключом.CREATE TABLE `table1`
(
`id` int(11) NOT NULL COMMENT "user ID",
`name` varchar(65533) NOT NULL COMMENT "user name",
`score` int(11) NOT NULL COMMENT "user score"
)
ENGINE=OLAP
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`);ПРИМЕЧАНИЕ
Начиная с версии v1.5.2, Selena может автоматически устанавливать количество bucket (BUCKETS) при создании таблицы или добавлении partition. Вам больше не нужно вручную устанавливать количество bucket. Для получения подробной информации см. установка количества bucket.
b. Вставьте запись в
table1.INSERT INTO table1 VALUES
(101, 'Lily',80);