我尝试使用这里描述的步骤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文件中的默认分隔符“,”导致了这个问题,因为CSV文件中的JSONB数据也有逗号。
作为替代方法,尝试将-delim “\t”传递给cassandra-unloader--但这似乎插入了两个字符“\”和“t”,而不是单制表符。这是意料之中的吗?
发布于 2019-09-08 13:50:01
您是正确的,使用cassandra-unloader/cassandra-loader时,默认分隔符(",")在Yugabyte中存在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'
https://stackoverflow.com/questions/57654892
复制相似问题