Как правильно экспортировать / импортировать данные, используя 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 jdk
sudo 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'

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