Как написать скрипты миграции cratedb?Скрипты миграции не работают - PullRequest
0 голосов
/ 24 января 2019

у нас есть база данных, в которой есть таблица учеников с идентификаторами столбцов, именем, возрастом, школой.

Теперь я хочу написать сценарий миграции, чтобы скопировать 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 ]

0 голосов
/ 24 января 2019

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

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

0 голосов
/ 24 января 2019
  1. Во время одного запроса есть только 1 оператор, так как вы говорите, что он работает при разделении запросов, поэтому вам нужно сделать два оператора.

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

0 голосов
/ 24 января 2019

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

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

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

0 голосов
/ 24 января 2019

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

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;
...