Как написать скрипты миграции cratedb? Скрипты миграции не работают

У нас есть база данных, в которой есть таблица "Студенты" с колонками id, name, age, school.

Теперь я хочу написать скрипт миграции, чтобы скопировать 3 столбца (предположим, у меня есть миллионы записей) из таблицы "Студенты" в таблицу "New_students".

Ниже приведен пример сценария, который я написал. Это выбрасывает ошибку

CREATE TABLE IF NOT EXISTS New_Students (
id PRIMARY KEY,
name string,
age string,
)

INSERT INTO New_Students(id,name,age)
SELECT  id,name,age
FROM students;

При выполнении выше в пользовательском интерфейсе администратора crateDb я получаю ошибку ниже

SQLActionException[SQLParseException: line 8:1: mismatched input 'INSERT' expecting <EOF>]

Вышеприведенные утверждения работают при выполнении индивидуально.

Вопрос:

  1. Почему выше несколько операторов не работают, но это работает, когда набирается индивидуально? 2. Как сделать, чтобы мы скопировали данные из столбцов таблицы в другую новую таблицу. Допустим, у меня есть миллионы записей, как мне сделать это более эффективно?

4 ответа

Решение

Консоль SQL интерфейса администратора CrateDB не поддерживает несколько операторов.

Вы могли бы использовать crash Вместо этого инструмент CLI, который поддерживает несколько операторов, см. https://crate.io/docs/clients/crash/en/latest/.

Поставить точку с запятой после создания таблицы

CREATE TABLE IF NOT EXISTS New_Students (
id int PRIMARY KEY,
name varchar(100),
age varchar(100) -- you need to remove this line coma as well 
);

INSERT INTO New_Students(id,name,age)
SELECT  id,name,age
FROM students;
  1. В одном запросе есть только 1 оператор, так как вы говорите, что он работает, когда вы разделяете запросы, поэтому вам нужно сделать два оператора.

  2. Даже с миллионами записей это все равно одно утверждение, так что не должно иметь значения эффективность? Вы только запускаете еще 1 отдельный сценарий для создания новой таблицы, вставка будет работать, как и ожидалось, сколько бы времени это ни заняло.

Почему бы просто не создать таблицу непосредственно из данных?

CREATE TABLE New_Students as
    SELECT id, name, age
    FROM students;

Ваша проблема в интерфейсе, который позволяет отправлять только выписки одновременно. Однако в этом случае вам могут не понадобиться два утверждения.

Другие вопросы по тегам