Cassandra コネクター¶
Cassandra コネクターを使用すると、Cassandra または ScyllaDB に保存されたデータをクエリできます。
互換性¶
このコネクターは、2.1.5 以降のすべての Cassandra バージョンと互換性があります。テスト済みの最新の ScyllaDB は 5.1.11 です。
設定¶
Cassandra コネクターを設定するには、カタログプロパティファイル etc/catalog/cassandra.properties を以下の内容で作成し、host1,host2 を、クラスタートポロジーの検出に使用される Cassandra ノードのコンマ区切りリストに置き換えます。
connector.name=cassandra
cassandra.contact-points=host1,host2
また、Cassandra ノードがデフォルトポート (9042) を使用していない場合は、cassandra.native-protocol-port を設定する必要があります。
ScyllaDB の場合、追加の設定は必要ありません。ScyllaDB はデフォルトで Cassandra と同じポートを使用します。cassandra.contact-points 設定プロパティで ScyllaDB ノードを指定するだけです。
複数の Cassandra または ScyllaDB クラスター¶
必要な数だけカタログを持つことができます。そのため、追加の Cassandra(ScyllaDB) クラスターがある場合は、別のプロパティファイルを etc/catalog に異なる名前で追加します (必ず .properties で終わるようにします)。たとえば、プロパティファイルの名前を sales.properties にすると、Presto は構成されたコネクターを使用して sales という名前のカタログを作成します。
設定プロパティ¶
次の設定プロパティを使用できます。
| プロパティ名 | 説明 | 
|---|---|
| 
 | Cassandra クラスター内のホストのコンマ区切りリスト。Cassandra ドライバーは、これらの連絡先を使用してクラスタートポロジーを検出します。少なくとも 1 つの Cassandra ホストが必要です。 | 
| 
 | ネイティブクライアントプロトコルを実行している Cassandra サーバーのポート (デフォルトは  | 
| 
 | Cassandra の整合性レベルは、読み取りと書き込みの両方の操作に使用される整合性のレベルを指します。整合性レベルの詳細については、Cassandra の整合性ドキュメントを参照してください。このプロパティは、デフォルトで整合性レベルが  | 
| 
 | DROP TABLE を介して Presto から Cassandra テーブルを削除できるようにするには、 | 
| 
 | Cassandra クラスターへの認証に使用されるユーザー名。これは、Presto に接続しているユーザーに関係なく、すべての接続に使用されるグローバル設定です。 | 
| 
 | Cassandra クラスターへの認証に使用されるパスワード。これは、Presto に接続しているユーザーに関係なく、すべての接続に使用されるグローバル設定です。 | 
| 
 | 古い Cassandra クラスターの場合、プロトコルバージョンをオーバーライドできます。このプロパティは、デフォルトで  | 
注
認証が有効になっている場合、cassandra.username は、system.size_estimates テーブルに対して SELECT クエリを実行するのに十分な権限を持っている必要があります。
次の高度な設定プロパティを使用できます。
| プロパティ名 | 説明 | 
|---|---|
| 
 | Cassandra クエリで一度にフェッチされる行数。 | 
| 
 | 単一のパーティションキー列テーブルの単一の選択にまとめてバッチ処理されるパーティション数。 | 
| 
 | Cassandra をクエリするときのスプリットごとのキー数。 | 
| 
 | ノードあたりのスプリット数。デフォルトでは、 | 
| 
 | Cassandra ドライバーが 1 つの Cassandra ノードからのクエリの応答を待機する最大時間。基になる Cassandra ドライバーは、読み取りタイムアウトが発生した場合、複数のノードに対してクエリを再試行する可能性があることに注意してください。これを増やすと、インデックスを使用するクエリに役立つ場合があります。 | 
| 
 | Cassandra ドライバーが Cassandra ノードへの接続を確立するのを待機する最大時間。これを増やすと、負荷の高い Cassandra クラスターに役立つ場合があります。 | 
| 
 | 送信されていないデータがキューに入っている場合に、クローズ時に猶予する秒数。ゼロに設定すると、ソケットはすぐに閉じられます。このオプションがゼロ以外の場合、ソケットは、すべてのデータがピアに書き込まれたことの確認のために、指定された秒数だけ猶予されます。このオプションを使用すると、不要になった接続をすぐに閉じることで、Cassandra サーバーでソケットが消費されるのを防ぐことができます。 | 
| 
 | Cassandraへの失敗したリクエストを再試行するためのポリシー。このプロパティのデフォルトは  | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | ローカルの一貫性レベルでリモートデータセンターのホストを使用できるようにするには  | 
| 
 | 
 | 
| 
 | レプリカのシャッフルを伴う  | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 投機的実行の回数(デフォルトは  | 
| 
 | 各投機的実行間の遅延(デフォルトは  | 
| 
 | TLSセキュリティが有効かどうか(デフォルトは  | 
| 
 | PEMまたはJKSキーストアへのパス。 | 
| 
 | PEMまたはJKSトラストストアへのパス。 | 
| 
 | キーストアのパスワード。 | 
| 
 | トラストストアのパスワード。 | 
CassandraまたはScyllaDBテーブルのクエリ¶
users テーブルは、Cassandraの入門ガイドにあるCassandraテーブルの例です。Cassandraのcqlsh(CQLインタラクティブターミナル)を使用して、mykeyspaceキースペースとともに作成できます。
cqlsh> CREATE KEYSPACE mykeyspace
   ... WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
cqlsh> USE mykeyspace;
cqlsh:mykeyspace> CREATE TABLE users (
              ...   user_id int PRIMARY KEY,
              ...   fname text,
              ...   lname text
              ... );
このテーブルはPrestoで記述できます
DESCRIBE cassandra.mykeyspace.users;
 Column  |  Type   | Extra | Comment
---------+---------+-------+---------
 user_id | bigint  |       |
 fname   | varchar |       |
 lname   | varchar |       |
(3 rows)
このテーブルは、Prestoでクエリできます
SELECT * FROM cassandra.mykeyspace.users;
データ型¶
データ型のマッピングは次のとおりです
| Cassandra | Presto | 
|---|---|
| ASCII | VARCHAR | 
| BIGINT | BIGINT | 
| BLOB | VARBINARY | 
| BOOLEAN | BOOLEAN | 
| DECIMAL | DOUBLE | 
| DOUBLE | DOUBLE | 
| FLOAT | REAL | 
| INET | VARCHAR(45) | 
| INT | INTEGER | 
| LIST<?> | VARCHAR | 
| MAP<?, ?> | VARCHAR | 
| SET<?> | VARCHAR | 
| TEXT | VARCHAR | 
| TIMESTAMP | TIMESTAMP | 
| TIMEUUID | VARCHAR | 
| VARCHAR | VARCHAR | 
| VARINT | VARCHAR | 
| SMALLINT | INTEGER | 
| TINYINT | INTEGER | 
| DATE | DATE | 
任意のコレクション(LIST/MAP/SET)はFROZENとして指定でき、値はVARCHARにマッピングされます。さらに、BLOBには空にできないという制限があります。
上記の表に記載されていない型はサポートされていません(例:タプルまたはUDT)。
パーティションキーは、次の型のみにすることができます
- ASCII 
- TEXT 
- VARCHAR 
- BIGINT 
- BOOLEAN 
- DOUBLE 
- INET 
- INT 
- FLOAT 
- DECIMAL 
- TIMESTAMP 
- UUID 
- TIMEUUID 
- SMALLINT 
- TINYINT 
- DATE 
制限事項¶
- パーティションキーを含むフィルターがないクエリは、すべてのパーティションのフェッチになります。これにより、データセット全体のフルスキャンが発生するため、パーティションキーをフィルターとする同様のクエリと比較して、はるかに遅くなります。 
- INリストフィルターは、インデックス付き(つまり、パーティションキーまたはクラスタリングキー)の列でのみ許可されます。
- 範囲( - <または- >および- BETWEEN)フィルターは、パーティションキーにのみ適用できます。