1

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"
    }
}

なぜexcにアクセスできません。

私がやりたいことは、テーブルが既に存在するかどうかを確認することです。ここのように確認できることはわかっていますが(Cassandraテーブルが存在するかどうかを確認する方法)、ただしCQL3でのみです。このリンクで説明されている方法も役に立ちません。なぜなら、なぜ値が「unconfigured columnfamily schema_columnfamilies」で他の例外が発生するからです。

将来、他の文脈で必要になるかもしれないので、「なぜ」の内容を一般的にどのように読むかを知りたいです。また、チェックできる何らかの CqlResult 値を返すだけではなく、例外をスローするだけです。

CQLクエリの実行からキャッチされた例外の「Why」の値を確認する方法は?

よろしく!

PS隠しクロスポストを避けるために:https ://cassandraemon.codeplex.com/discussions/441028

4

1 に答える 1

1

このエラーは、探しているテーブル (別名カラム ファミリー) が存在しないことを示していますが、schema_columnfamiliesテーブルは常に存在する必要があるため、テーブルが配置されているスキーマ (別名キースペース) を指定していない可能性が最も高いです。

systemこのステートメントは、キースペースを使用していることを指定していることを前提としています。

SELECT columnfamily_name 
FROM schema_columnfamilies WHERE keyspace_name='keyspaceName';

システムキースペースを使用する必要があると指定していないと思うので、CQLステートメントとしてこれを試して、テーブルが存在することを確認してください。

SELECT columnfamily_name
FROM system.schema_columnfamilies WHERE keyspace_name='keyspaceName';
于 2013-04-21T12:47:59.820 に答える