我尝试使用此处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的,因此安装时请打开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 :(得分:1)
您是正确的,对于cassandra-unloader / cassandra-loader,默认分隔符(“,”)在Yugabyte DB中存在YCQL JSONB列时不起作用。
关于:
<<作为一种替代方法,尝试将-delim“ \ t”传递给cassandra-unloader,但是似乎插入了两个字符“ \”和“ t”,而不是单个制表符。那是预期的吗? >>
使用制表符作为分隔符应该可以正常工作。但是unix shell需要进行一些转义才能将“ \ 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'