Как правильно экспортировать / импортировать данные, используя cassandra-loader/cassandra-unloader для базы данных YugaByte в таблице со столбцами JSONB
Я попытался использовать шаги, описанные здесь https://docs.yugabyte.com/v1.1/manage/data-migration/cassandra/bulk-export/
wget https://github.com/YugaByte/cassandra-loader/releases/download/v0.0.27-yb-2/cassandra-loader
wget https://github.com/YugaByte/cassandra-loader/releases/download/v0.0.27-yb-2/cassandra-unloader
chmod a+x cassandra-unloader
chmod a+x cassandra-loader
Поскольку вышеупомянутые инструменты основаны на JVM, установленный open jdksudo yum install java-1.8.0-openjdk
Затем экспортировал строки, используя:
% cd /home/yugabyte/entity
% ./cassandra-unloader -schema "my_ksp.my_table(id,type,details)" -host <tserver-ip> -f export.csv -numThreads 3
Total rows retrieved: 10000
Вот details
столбец JSONB Далее я создаю новую таблицу my_table_new
в том же кластере, и попробуйте загрузить эти данные в
./cassandra-loader -schema "my_ksp.my_table_new(id,type,details)" -host <tserver-ip> -f /home/yugabyte/entity -numThreads 3 -progressRate 200000 -numFutures 256 -rate 5000 -queryTimeout 65
Но получите ошибки вида:Row has different number of fields (12) than expected (3)
Похоже, что разделитель по умолчанию "," в файле CSV вызывает проблему, поскольку данные JSONB в файле CSV также имеют запятые.
В качестве альтернативы пробовал проходить -delim “\t”
для cassandra-unloader-- но, кажется, вставляются два символа "\" и "t", а не символ с одной вкладкой. Это ожидается?
0 ответов
Вы правы, что при использовании cassandra-unloader/cassandra-loader разделитель по умолчанию (",") не работает при наличии столбцов YCQL JSONB в БД Югабайта.
Что касается:
<< В качестве альтернативы попытался передать -delim "\t" в cassandra-unloader - но это, кажется, вставляет два символа "\" и "t", а не символ одной табуляции. Это ожидается? >>
Использование табуляции в качестве символа-разделителя должно работать правильно. Но оболочка unix нуждается в некотором экранировании, чтобы правильно передать "\t" программе. См.: https://superuser.com/questions/362235/how-do-i-enter-a-literal-tab-character-in-a-bash-shell
Использование:-delim $'\t'
вместо того-delim "\t"
Так, например, для экспорта попробуйте:
./cassandra-unloader -schema "my_ksp.my_table(id,type,details)" -host <tserver-ip> -f export.csv -numThreads 3 -delim $'\t'
а для импорта попробуйте:
./cassandra-loader -schema "my_ksp.my_table_new(id,type,details)" -host <tserver-ip> -f /home/yugabyte/entity -numThreads 3 -progressRate 200000 -numFutures 256 -rate 5000 -queryTimeout 65 -delim $'\t'