cqlsh -e "копия таблицы" висит навсегда - PullRequest
1 голос
/ 07 июня 2019

У меня есть несколько таблиц, которые я хочу скопировать из одного кластера Cassandra в другой; Я подумал, что самый простой способ сделать это - запустить серию команд оболочки, таких как:

cqlsh -e "копировать keyspace.table1 в 'table1.csv' с заголовком = true;

(а затем серия обратных команд оболочки для копирования в новый кластер).

Однако, когда я запускаю это, я вижу:

Использование 11 дочерних процессов

Начальная копия keyspace.table1 со столбцами [column1, column2, column3, column4].

Но процесс зависает навсегда, никогда не добавляя к целевому файлу CSV.

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Каково количество строк и размер каждой строки в таблице, которую вы пытаетесь скопировать? Неоптимально использовать COPY, если размер строки и количество строк огромны.

Один из вариантов, который вы можете попробовать - уменьшить размер партии.

cqlsh -e "copy table keyspace.table1 to 'table1.csv' with header = true AND MAXBATCHSIZE=5;

Это может занять больше времени, но, несомненно, закончится. У меня была похожая проблема с таблицей, имеющей около 30 миллионов записей, и помогло уменьшить размер пакета.

0 голосов
/ 08 июня 2019

Может быть более эффективно использовать снимок таблицы с

nodetool snapshot -cf <table_name> -t <snpashot_id> <keyspace>

, где пространство ключей и имя таблицы - это имена вашей структуры;snapshot_id будет меткой, которая поможет вам идентифицировать снимок.

Вы сможете проверить моментальный снимок с помощью nodetool listsnapshots, а затем восстановить его с помощью процедуры, описанной здесь .

Как только вы закончите с процедурой, вам нужно будет провести уборку дома с помощью nodetool clearsnapshot <snapshot_id>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...