Migration

從 Cassandra 2.x 遷移到 3.x:schema_keyspaces 表消失了。你如何查詢系統鍵空間?

  • August 7, 2019

我剛剛從 Cassandra 2.x 遷移到 3.x(特別是 3.4)。現在系統表已經完全改變了,這些改變不在文件中。如果您查看系統表的目前 CQL 文件,它們僅描述了 2.X 中的系統模式。

Cassandra 2.X 及更高版本的 CQL 3.3 文件

有沒有人可以訪問詳細說明此更改的文件?如何查詢以查看可用的鍵空間?

有一個名為“system_schema”的新系統鍵空間,但其中只有兩個表:system_schema.tablessystem_schema.columns. 所以我不知道在哪裡尋找我需要的資訊(我需要能夠有效地執行DESCRIBE KEYSPACES命令,但在 cqlsh 之外)。

答案是這樣SELECT keyspace_name FROM system_schema.tables;的:新的方法嗎?

所以我發現有一個更好的方法:你通過 API。我從這個答案中得到了想法:

https://stackoverflow.com/a/35182348/2933397

您需要直接訪問鍵空間元數據。因此,這裡有一個如何訪問模式元數據的範例:

Cassandra CPP 驅動程序:UDF 元數據

這個想法是獲取一個指向 CassSchemaMeta 對象的指針,然後您可以訪問所有的鍵空間、表、列、函式等。

http://datastax.github.io/cpp-driver/api/struct.CassSchemaMeta/

作為旁注,我需要這些資訊,以便我可以支持 C++ 中的模式閱讀。我們創建了一個提供 C++ 綁定的包裝庫,這裡支持 Schema 的東西:

https://github.com/m2osw/libcasswrapper

有一個名為“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)。

引用自:https://dba.stackexchange.com/questions/134185