我已经开始使用cassandraemon(带有C#的Apache Cassandra NoSQL),我只是想知道是否有任何方法可以读取异常被执行CQL查询中的“为什么”值?
当我执行以下操作时:
try
{
CqlResult createResult = context.ExecuteCqlQuery(createTableCql);
}
catch (Exception exc)
{
if (exc.Why.Contains("already existing"))
{ // Why = org.apache.cassandra.exceptions.AlreadyExistsException: Cannot add already existing column family "nameOfColumn" to keyspace "nameOfKeyspace"
}
}
我无法以任何方式访问为什么。
我想要做的是检查表是否已存在。我知道我可以像这里(How to check if a Cassandra table exists)一样检查它,但仅限于CQL3。此链接中描述的方式也没有帮助,因为我得到了其他异常,为什么值为“unconfigured columnfamily schema_columnfamilies”。
我想知道如何阅读“为什么”的内容,因为我将来可能会在其他情况下需要它。并且它不会简单地返回我可以检查的某种CqlResult值,它只会引发异常。
如何检查执行CQL查询的捕获异常中“为什么”的值?
问候!
PS为了避免隐藏的交叉发布:https://cassandraemon.codeplex.com/discussions/441028
答案 0 :(得分:1)
错误告诉您,您要查找的表(也称为列族)不存在,但schema_columnfamilies
表应该始终存在,因此问题很可能是您没有指定哪个架构(又名keypace)表位于。
此语句假定您已指定使用system
键空间:
SELECT columnfamily_name
FROM schema_columnfamilies WHERE keyspace_name='keyspaceName';
我认为您没有指定应该使用系统密钥空间,因此请尝试使用此CQL语句来验证表是否存在。
SELECT columnfamily_name
FROM system.schema_columnfamilies WHERE keyspace_name='keyspaceName';