從 Cassandra 2.x 遷移到 3.x:schema_keyspaces 表消失了。你如何查詢系統鍵空間?
我剛剛從 Cassandra 2.x 遷移到 3.x(特別是 3.4)。現在系統表已經完全改變了,這些改變不在文件中。如果您查看系統表的目前 CQL 文件,它們僅描述了 2.X 中的系統模式。
Cassandra 2.X 及更高版本的 CQL 3.3 文件
有沒有人可以訪問詳細說明此更改的文件?如何查詢以查看可用的鍵空間?
有一個名為“system_schema”的新系統鍵空間,但其中只有兩個表:
system_schema.tables
和system_schema.columns
. 所以我不知道在哪裡尋找我需要的資訊(我需要能夠有效地執行DESCRIBE KEYSPACES
命令,但在 cqlsh 之外)。答案是這樣
SELECT keyspace_name FROM system_schema.tables;
的:新的方法嗎?
所以我發現有一個更好的方法:你通過 API。我從這個答案中得到了想法:
https://stackoverflow.com/a/35182348/2933397
您需要直接訪問鍵空間元數據。因此,這裡有一個如何訪問模式元數據的範例:
這個想法是獲取一個指向 CassSchemaMeta 對象的指針,然後您可以訪問所有的鍵空間、表、列、函式等。
http://datastax.github.io/cpp-driver/api/struct.CassSchemaMeta/
作為旁注,我需要這些資訊,以便我可以支持 C++ 中的模式閱讀。我們創建了一個提供 C++ 綁定的包裝庫,這裡支持 Schema 的東西:
有一個名為“system_schema”的新系統鍵空間,但其中只有兩個表:
好的,您的升級中一定出了問題,因為那是不對的。當我檢查我的 system_schema 3.4 時,我看到了這個:
[cqlsh 5.0.1 | Cassandra 3.4 | CQL spec 3.4.0 | Native protocol v4] Use HELP for help. aploetz@cqlsh> use system_schema ; aploetz@cqlsh:system_schema> desc tables; tables triggers views keyspaces dropped_columns functions aggregates indexes types columns
該鍵空間中肯定有兩個以上的表。
如何查詢以查看可用的鍵空間?
執行此操作的新方法是查詢 system_schema.keyspaces:
aploetz@cqlsh:system_schema> SELECT * FROM keyspaces; keyspace_name | durable_writes | replication ------------------------+----------------+------------------------------------------------------------------------------------- zeroreplication | True | {'DC1': '0', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system_auth | True | {'class': 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system_schema | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} experfy_class | True | {'DC1': '1', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} stackoverflow | True | {'DC1': '1', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} eqcontrol | True | {'DC1': '1', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}
system.schema_keyspaces 和 system_schema.keyspaces 的主要區別在於 system_schema.keyspaces 只有 3 列而不是 2 列(
strategy_class
並被strategy_options
合併為replication
)。