Cassandra ドキュメント

バージョン

プレリリース版のドキュメントを表示しています。

一括ロード

Apache Cassandra データの一括ロードは、さまざまなツールでサポートされています。一括ロードするデータは、SSTable 形式である必要があります。Cassandra は、CSV、JSON、XML などの他の形式でのデータの直接ロードをサポートしていません。cqlsh の COPY コマンドは CSV データをロードできますが、大量のデータには適していません。一括ロードは、次の目的で使用されます。

  • 増分バックアップとスナップショットを復元します。バックアップとスナップショットは、すでに SSTable 形式です。

  • 既存の SSTable を別のクラスターにロードします。データは、異なるノード数またはレプリケーション戦略を持つことができます。

  • 外部データをクラスターにロードします。

一括ロード用ツール

Cassandra は、データの一括ロード用に 2 つのコマンドまたはツールを提供しています

  • Cassandra 一括ローダー (sstableloader とも呼ばれる)

  • nodetool import コマンド

Cassandra のインストール bin ディレクトリが PATH 環境変数に含まれている場合、sstableloadernodetool import にアクセスできます。または、bin ディレクトリから直接アクセスできます。例では、バックアップで作成されたキースペースとテーブルを使用します。

sstableloader の使用

sstableloader は、データの一括アップロードのためのメインツールです。sstableloader は、レプリケーション戦略とレプリケーションファクターに従って、SSTable データファイルを実行中のクラスターにストリーミングします。データをアップロードするテーブルは、空である必要はありません。

sstableloader を実行するための唯一の要件は次のとおりです

  • 接続してリング情報を取得するための 1 つ以上のコンマ区切りの初期ホスト

  • ロードする SSTable のディレクトリパス

sstableloader [options] <dir_path>

Sstableloader は、ディレクトリ <dir_path> にある SSTable を、構成されたクラスターに一括ロードします。<dir_path> は、ターゲットの *キースペース/テーブル* 名として使用されます。たとえば、Standard1-g-1-Data.db という名前の SSTable を Keyspace1/Standard1 にロードするには、ディレクトリ /path/to/Keyspace1/Standard1/ にファイル Standard1-g-1-Data.dbStandard1-g-1-Index.db が必要になります。

ターゲットキースペース名を受け入れる sstableloader オプション

多くの場合、バックアップ戦略の一環として、一部の Cassandra DBA はデータディレクトリ全体を保存します。データの破損が見つかった場合、同じクラスター (大規模なクラスターの場合は 200 ノード) で、異なるキースペース名でデータを復元することが一般的です。

現在、sstableloader はフォルダ構造からキースペース名を派生させます。オプションとして、sstableloader の一部としてターゲットのキースペース名を指定するために、バージョン 4.0 では --target-keyspace オプションのサポートが追加されています (CASSANDRA-13884)。

次のオプションがサポートされています。-d,--nodes <initial hosts> が必須です

-alg,--ssl-alg <ALGORITHM>                                   Client SSL: algorithm

-ap,--auth-provider <auth provider>                          Custom
                                                             AuthProvider class name for
                                                             cassandra authentication
-ciphers,--ssl-ciphers <CIPHER-SUITES>                       Client SSL:
                                                             comma-separated list of
                                                             encryption suites to use
-cph,--connections-per-host <connectionsPerHost>             Number of
                                                             concurrent connections-per-host.
-d,--nodes <initial hosts>                                   Required.
                                                             Try to connect to these hosts (comma separated) initially for ring information

--entire-sstable-throttle-mib <throttle-mib>                 Entire SSTable throttle
                                                             speed in MiB/s (default 0 for unlimited).

--entire-sstable-inter-dc-throttle-mib                       <inter-dc-throttle-mib>
                                                             Entire SSTable inter-datacenter throttle
                                                             speed in MiB/s (default 0 for unlimited).

-f,--conf-path <path to config file>                         cassandra.yaml file path for streaming throughput and client/server SSL.

-h,--help                                                    Display this help message

-i,--ignore <NODES>                                          Don't stream to this (comma separated) list of nodes

-idct,--inter-dc-throttle <inter-dc-throttle>                (deprecated) Inter-datacenter throttle speed in Mbits (default 0 for unlimited).
                                                             Use --inter-dc-throttle-mib instead.

--inter-dc-throttle-mib <inter-dc-throttle-mib>              Inter-datacenter throttle speed in MiB/s (default 0 for unlimited)

-k,--target-keyspace <target keyspace name>                  Target
                                                             keyspace name
-ks,--keystore <KEYSTORE>                                    Client SSL:
                                                             full path to keystore
-kspw,--keystore-password <KEYSTORE-PASSWORD>                Client SSL:
                                                             password of the keystore
--no-progress                                                Don't
                                                             display progress
-p,--port <native transport port>                            Port used
                                                             for native connection (default 9042)
-prtcl,--ssl-protocol <PROTOCOL>                             Client SSL:
                                                             connections protocol to use (default: TLS)
-pw,--password <password>                                    Password for
                                                             cassandra authentication
-sp,--storage-port <storage port>                            Port used
                                                             for internode communication (default 7000)
-spd,--server-port-discovery <allow server port discovery>   Use ports
                                                             published by server to decide how to connect. With SSL requires StartTLS
                                                             to be used.
-ssp,--ssl-storage-port <ssl storage port>                   Port used
                                                             for TLS internode communication (default 7001)
-st,--store-type <STORE-TYPE>                                Client SSL:
                                                             type of store
-t,--throttle <throttle>                                     (deprecated) Throttle speed in Mbits (default 0 for unlimited).
                                                             Use --throttle-mib instead.
--throttle-mib <throttle-mib>                                Throttle
                                                             speed in MiB/s (default 0 for unlimited)
-ts,--truststore <TRUSTSTORE>                                Client SSL:
                                                             full path to truststore
-tspw,--truststore-password <TRUSTSTORE-PASSWORD>            Client SSL:
                                                             Password of the truststore
-u,--username <username>                                     Username for
                                                             cassandra authentication
-v,--verbose                                                 verbose
                                                             output

cassandra.yaml ファイルは、ストリーミングスループット、クライアントおよびサーバー暗号化オプションを設定するために、コマンドラインで -f オプションを使用して提供できます。cassandra.yaml ファイルから読み取られるのは、stream_throughput_outbound_megabits_per_secserver_encryption_optionsclient_encryption_options のみです。cassandra.yaml から読み取られたオプションは、対応するコマンドラインオプションで上書きできます。

sstableloader デモ

例として、sstableloader を使用して、テーブル catalogkeyspace.magazine の増分バックアップデータをアップロードする方法を示します。さらに、同じテーブルのスナップショットを作成して、sstableloader で一括アップロードします。

catalogkeyspace.magazine テーブルのバックアップとスナップショットは、次のとおりです

$ cd ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c && ls -l

結果は

total 0
drwxrwxr-x. 2 ec2-user ec2-user 226 Aug 19 02:38 backups
drwxrwxr-x. 4 ec2-user ec2-user  40 Aug 19 02:45 snapshots

sstableloader を使用してアップロードされる SSTable のディレクトリパス構造は、ターゲットのキースペース/テーブルとして使用されます。ディレクトリ構造が sstableloader で使用される形式の場合、それぞれ backups および snapshots ディレクトリから直接アップロードできます。ただし、SSTable のバックアップとスナップショットのディレクトリパスは、それぞれ /catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups および /catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots であり、catalogkeyspace.magazine テーブルへの SSTable のアップロードには使用できません。sstableloader を使用するには、ディレクトリパス構造が /catalogkeyspace/magazine/ である必要があります。/catalogkeyspace/magazine にある sstableloader で SSTable をアップロードするための新しいディレクトリ構造を作成し、適切なアクセス許可を設定します。

$ sudo mkdir -p /catalogkeyspace/magazine
$ sudo chmod -R 777 /catalogkeyspace/magazine

増分バックアップからのバルクロード

増分バックアップには、テーブルの DDL は含まれません。テーブルはすでに存在している必要があります。テーブルが削除された場合は、テーブルのスナップショットごとに生成される schema.cql ファイルを使用して作成できます。sstableloader を使用して SSTable を magazine テーブルにロードする前に、テーブルが存在している必要があります。テーブルは空である必要はありませんが、CQL クエリで示されているように空のテーブルを使用しました

SELECT * FROM magazine;

結果は

id | name | publisher
----+------+-----------

(0 rows)

アップロード先のテーブルを作成した後、SSTable ファイルを backups ディレクトリから /catalogkeyspace/magazine/ ディレクトリにコピーします。

$ sudo cp ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/backups/* \
/catalogkeyspace/magazine/

sstableloader を実行して、/catalogkeyspace/magazine/ ディレクトリから SSTable をアップロードします。

$ sstableloader --nodes 10.0.2.238  /catalogkeyspace/magazine/

sstableloader コマンドからの出力は、次のリストに似ているはずです

$ sstableloader --nodes 10.0.2.238  /catalogkeyspace/magazine/

結果は

Opening SSTables and calculating sections to stream
Streaming relevant part of /catalogkeyspace/magazine/na-1-big-Data.db
/catalogkeyspace/magazine/na-2-big-Data.db  to [35.173.233.153:7000, 10.0.2.238:7000,
54.158.45.75:7000]
progress: [35.173.233.153:7000]0:1/2 88 % total: 88% 0.018KiB/s (avg: 0.018KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% total: 176% 33.807KiB/s (avg: 0.036KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% total: 176% 0.000KiB/s (avg: 0.029KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:1/2 39 % total: 81% 0.115KiB/s
(avg: 0.024KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 % total: 108%
97.683KiB/s (avg: 0.033KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 %
[54.158.45.75:7000]0:1/2 39 % total: 80% 0.233KiB/s (avg: 0.040KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 %
[54.158.45.75:7000]0:2/2 78 % total: 96% 88.522KiB/s (avg: 0.049KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 %
[54.158.45.75:7000]0:2/2 78 % total: 96% 0.000KiB/s (avg: 0.045KiB/s)
progress: [35.173.233.153:7000]0:2/2 176% [10.0.2.238:7000]0:2/2 78 %
[54.158.45.75:7000]0:2/2 78 % total: 96% 0.000KiB/s (avg: 0.044KiB/s)

sstableloader がデータのロードを完了したら、magazine テーブルに対してクエリを実行して確認します

SELECT * FROM magazine;

結果は

id | name                      | publisher
----+---------------------------+------------------
 1 |        Couchbase Magazine |        Couchbase
 0 | Apache Cassandra Magazine | Apache Cassandra

(2 rows)

スナップショットからのバルクロード

テーブルのスナップショットを同じテーブルに復元するのは簡単です

SSTable を catalogkeyspace.magazine にロードするために必要なディレクトリ構造が存在しない場合は、ディレクトリを作成し、適切なアクセス許可を設定します

$ sudo mkdir -p /catalogkeyspace/magazine
$ sudo chmod -R 777 /catalogkeyspace/magazine

ディレクトリからファイルを削除して、スナップショットファイルを干渉なしにコピーできるようにします

$ sudo rm /catalogkeyspace/magazine/*
$ cd /catalogkeyspace/magazine/
$ ls -l

結果は

total 0

スナップショットファイルを /catalogkeyspace/magazine ディレクトリにコピーします。

$ sudo cp ./cassandra/data/data/catalogkeyspace/magazine-446eae30c22a11e9b1350d927649052c/snapshots/magazine/* \
/catalogkeyspace/magazine

/catalogkeyspace/magazine ディレクトリ内のファイルを一覧表示します。schema.cql も一覧表示されます。

$ cd /catalogkeyspace/magazine && ls -l

結果は

total 44
-rw-r--r--. 1 root root   31 Aug 19 04:13 manifest.json
-rw-r--r--. 1 root root   47 Aug 19 04:13 na-1-big-CompressionInfo.db
-rw-r--r--. 1 root root   97 Aug 19 04:13 na-1-big-Data.db
-rw-r--r--. 1 root root   10 Aug 19 04:13 na-1-big-Digest.crc32
-rw-r--r--. 1 root root   16 Aug 19 04:13 na-1-big-Filter.db
-rw-r--r--. 1 root root   16 Aug 19 04:13 na-1-big-Index.db
-rw-r--r--. 1 root root 4687 Aug 19 04:13 na-1-big-Statistics.db
-rw-r--r--. 1 root root   56 Aug 19 04:13 na-1-big-Summary.db
-rw-r--r--. 1 root root   92 Aug 19 04:13 na-1-big-TOC.txt
-rw-r--r--. 1 root root  815 Aug 19 04:13 schema.cql

または、データをコピーする代わりに、スナップショットフォルダーへのシンボリックリンクを作成します

$ mkdir <keyspace_name>
$ ln -s <path_to_snapshot_folder> <keyspace_name>/<table_name>

magazine テーブルが削除された場合は、schema.cql の DDL を実行してテーブルを作成します。次のコマンドで sstableloader を実行します

$ sstableloader --nodes 10.0.2.238  /catalogkeyspace/magazine/

コマンドからの出力が示すように、SSTable はクラスターにストリーミングされます

Established connection to initial hosts
Opening SSTables and calculating sections to stream
Streaming relevant part of /catalogkeyspace/magazine/na-1-big-Data.db  to
[35.173.233.153:7000, 10.0.2.238:7000, 54.158.45.75:7000]
progress: [35.173.233.153:7000]0:1/1 176% total: 176% 0.017KiB/s (avg: 0.017KiB/s)
progress: [35.173.233.153:7000]0:1/1 176% total: 176% 0.000KiB/s (avg: 0.014KiB/s)
progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 % total: 108% 0.115KiB/s
(avg: 0.017KiB/s)
progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 %
[54.158.45.75:7000]0:1/1 78 % total: 96% 0.232KiB/s (avg: 0.024KiB/s)
progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 %
[54.158.45.75:7000]0:1/1 78 % total: 96% 0.000KiB/s (avg: 0.022KiB/s)
progress: [35.173.233.153:7000]0:1/1 176% [10.0.2.238:7000]0:1/1 78 %
[54.158.45.75:7000]0:1/1 78 % total: 96% 0.000KiB/s (avg: 0.021KiB/s)

考慮に入れる必要がある sstableloader のその他の要件を次に示します

  • ロードされる SSTable は、ロード先の Cassandra バージョンと互換性がある必要があります。

  • 別のクラスターにロードされたテーブルを修復しても、ソーステーブルは修復されません。

  • Sstableloader は、ノード間通信にポート 7000 を使用します。

  • 増分バックアップを復元する前に、nodetool flush を実行して、memtable 内のデータをバックアップします。

nodetool import の使用

非推奨の nodetool refresh コマンドの代わりに、nodetool import コマンドを使用して SSTable をテーブルにインポートすることをお勧めします。nodetool import コマンドには、別のディレクトリから新しい SSTable をロードするオプションがあります。

コマンドの使い方は次のとおりです

nodetool [(-h <host> | --host <host>)] [(-p <port> | --port <port>)]
       [(-pp | --print-port)] [(-pw <password> | --password <password>)]
       [(-pwf <passwordFilePath> | --password-file <passwordFilePath>)]
       [(-u <username> | --username <username>)] import
       [(-c | --no-invalidate-caches)] [(-e | --extended-verify)]
       [(-l | --keep-level)] [(-q | --quick)] [(-r | --keep-repaired)]
       [(-t | --no-tokens)] [(-v | --no-verify)] [--] <keyspace> <table>
       <directory> ...

引数 keyspacetable 名、directory は必須です。

次のオプションがサポートされています

-c, --no-invalidate-caches
    Don't invalidate the row cache when importing

-e, --extended-verify
    Run an extended verify, verifying all values in the new SSTables

-h <host>, --host <host>
    Node hostname or ip address

-l, --keep-level
    Keep the level on the new SSTables

-p <port>, --port <port>
    Remote jmx agent port number

-pp, --print-port
    Operate in 4.0 mode with hosts disambiguated by port number

-pw <password>, --password <password>
    Remote jmx agent password

-pwf <passwordFilePath>, --password-file <passwordFilePath>
    Path to the JMX password file

-q, --quick
    Do a quick import without verifying SSTables, clearing row cache or
    checking in which data directory to put the file

-r, --keep-repaired
    Keep any repaired information from the SSTables

-t, --no-tokens
    Don't verify that all tokens in the new SSTable are owned by the
    current node

-u <username>, --username <username>
    Remote jmx agent username

-v, --no-verify
    Don't verify new SSTables

--
    This option can be used to separate command-line options from the
    list of argument, (useful when arguments might be mistaken for
    command-line options

キースペースとテーブルは nodetool import のコマンドラインで指定されるため、SSTable を特定のディレクトリパスに配置するという、sstableloader と同じ要件はありません。nodetool import でスナップショットまたは増分バックアップをインポートする場合、SSTable を別のディレクトリにコピーする必要はありません。

増分バックアップからのデータのインポート

nodetool import を使用して、増分バックアップから SSTable をインポートし、テーブルを復元する方法を次に示します。

DROP table t;

テーブルの増分バックアップには、テーブルのスキーマ定義は含まれていません。スキーマ定義が別のバックアップとして保持されていない場合は、テーブルのバックアップからの schema.cql を使用して、次のようにテーブルを作成できます

CREATE TABLE IF NOT EXISTS cqlkeyspace.t (
   id int PRIMARY KEY,
   k int,
   v text)
   WITH ID = d132e240-c217-11e9-bbee-19821dcea330
   AND bloom_filter_fp_chance = 0.01
   AND crc_check_chance = 1.0
   AND default_time_to_live = 0
   AND gc_grace_seconds = 864000
   AND min_index_interval = 128
   AND max_index_interval = 2048
   AND memtable_flush_period_in_ms = 0
   AND speculative_retry = '99p'
   AND additional_write_policy = '99p'
   AND comment = ''
   AND caching = { 'keys': 'ALL', 'rows_per_partition': 'NONE' }
   AND compaction = { 'max_threshold': '32', 'min_threshold': '4',
   'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' }
   AND compression = { 'chunk_length_in_kb': '16', 'class':
   'org.apache.cassandra.io.compress.LZ4Compressor' }
   AND cdc = false
   AND extensions = {  }
;

最初はテーブルを空にすることができますが、必ずしもそうである必要はありません。

SELECT * FROM t;
id | k | v
----+---+---

(0 rows)

nodetool import コマンドを実行し、キースペース、テーブル、バックアップディレクトリを指定します。sstableloader のように、テーブルのバックアップを別のディレクトリにコピーしないでください。

$ nodetool import -- cqlkeyspace t \
./cassandra/data/data/cqlkeyspace/t-d132e240c21711e9bbee19821dcea330/backups

SSTable がテーブルにインポートされます。cqlsh でクエリを実行して確認します

SELECT * FROM t;
id | k | v
----+---+------
 1 | 1 | val1
 0 | 0 | val0

(2 rows)

スナップショットからのデータのインポート

nodetool import コマンドを使用してスナップショットから SSTable をインポートする方法は、増分バックアップから SSTable をインポートする方法と似ています。ここでは、リストアを実証するためにテーブルをドロップした後、テーブル catalogkeyspace.journal のスナップショットをインポートする例を示します。

USE CATALOGKEYSPACE;
DROP TABLE journal;

journal テーブルに対して catalog-ks スナップショットを使用します。スナップショット内のファイルを確認し、schema.cql ファイルが存在することを確認してください。

$ ls -l
total 44
-rw-rw-r--. 1 ec2-user ec2-user   31 Aug 19 02:44 manifest.json
-rw-rw-r--. 3 ec2-user ec2-user   47 Aug 19 02:38 na-1-big-CompressionInfo.db
-rw-rw-r--. 3 ec2-user ec2-user   97 Aug 19 02:38 na-1-big-Data.db
-rw-rw-r--. 3 ec2-user ec2-user   10 Aug 19 02:38 na-1-big-Digest.crc32
-rw-rw-r--. 3 ec2-user ec2-user   16 Aug 19 02:38 na-1-big-Filter.db
-rw-rw-r--. 3 ec2-user ec2-user   16 Aug 19 02:38 na-1-big-Index.db
-rw-rw-r--. 3 ec2-user ec2-user 4687 Aug 19 02:38 na-1-big-Statistics.db
-rw-rw-r--. 3 ec2-user ec2-user   56 Aug 19 02:38 na-1-big-Summary.db
-rw-rw-r--. 3 ec2-user ec2-user   92 Aug 19 02:38 na-1-big-TOC.txt
-rw-rw-r--. 1 ec2-user ec2-user  814 Aug 19 02:44 schema.cql

schema.cql から DDL をコピーし、cqlsh で実行して catalogkeyspace.journal テーブルを作成します。

CREATE TABLE IF NOT EXISTS catalogkeyspace.journal (
   id int PRIMARY KEY,
   name text,
   publisher text)
   WITH ID = 296a2d30-c22a-11e9-b135-0d927649052c
   AND bloom_filter_fp_chance = 0.01
   AND crc_check_chance = 1.0
   AND default_time_to_live = 0
   AND gc_grace_seconds = 864000
   AND min_index_interval = 128
   AND max_index_interval = 2048
   AND memtable_flush_period_in_ms = 0
   AND speculative_retry = '99p'
   AND additional_write_policy = '99p'
   AND comment = ''
   AND caching = { 'keys': 'ALL', 'rows_per_partition': 'NONE' }
   AND compaction = { 'min_threshold': '4', 'max_threshold':
   '32', 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' }
   AND compression = { 'chunk_length_in_kb': '16', 'class':
   'org.apache.cassandra.io.compress.LZ4Compressor' }
   AND cdc = false
   AND extensions = {  }
;

nodetool import コマンドを実行して、スナップショットの SSTable をインポートします。

$ nodetool import -- catalogkeyspace journal \
./cassandra/data/data/catalogkeyspace/journal-
296a2d30c22a11e9b1350d927649052c/snapshots/catalog-ks/

その後、journal テーブルで CQL クエリを実行して、インポートされたデータを確認します。

SELECT * FROM journal;
id | name                      | publisher
----+---------------------------+------------------
 1 |        Couchbase Magazine |        Couchbase
 0 | Apache Cassandra Magazine | Apache Cassandra

(2 rows)

外部データのバルクロード

外部データを直接バルクロードすることは、sstableloadernodetool import を含む、これまで説明してきたどのツールでもサポートされていません。sstableloadernodetool import では、データが SSTable の形式である必要があります。Apache Cassandra は、org.apache.cassandra.io.sstable.CQLSSTableWriter Java クラスを使用して、入力データから SSTable を生成するための Java API をサポートしています。その後、sstableloader または nodetool import のいずれかを使用して SSTable をバルクロードします。

CQLSSTableWriter Java API を使用した SSTable の生成

CQLSSTableWriter クラスを使用して SSTable を生成するには、以下が必要です。

  • SSTable を生成する出力ディレクトリ

  • SSTable のスキーマ

  • INSERT 用のプリペアドステートメント

  • パーティショナー

出力ディレクトリは、開始する前に存在している必要があります。ディレクトリ (例:/sstables) を作成し、適切な権限を設定します。

$ sudo mkdir /sstables
$ sudo chmod  777 -R /sstables

Java アプリケーションで CQLSSTableWriter を使用するには、出力ディレクトリ用の Java 定数を作成します。

public static final String OUTPUT_DIR = "./sstables";

CQLSSTableWriter Java API は、ユーザー定義型を作成できます。int データを格納する新しい型を作成します。

String type = "CREATE TYPE CQLKeyspace.intType (a int, b int)";
// Define a String variable for the SSTable schema.
String schema = "CREATE TABLE CQLKeyspace.t ("
                 + "  id int PRIMARY KEY,"
                 + "  k int,"
                 + "  v1 text,"
                 + "  v2 intType,"
                 + ")";

使用するプリペアドステートメント用の String 変数を定義します。

String insertStmt = "INSERT INTO CQLKeyspace.t (id, k, v1, v2) VALUES (?, ?, ?, ?)";

デフォルトのパーティショナー Murmur3Partitioner を使用しない場合にのみ、使用するパーティショナーを設定する必要があります。

これらの変数または設定はすべて、ビルダー クラス CQLSSTableWriter.Builder によって CQLSSTableWriter オブジェクトを作成するために使用されます。

出力ディレクトリ用の File オブジェクトを作成します。

File outputDir = new File(OUTPUT_DIR + File.separator + "CQLKeyspace" + File.separator + "t");

static メソッド CQLSSTableWriter.builder() を使用して、CQLSSTableWriter.Builder オブジェクトを取得します。次の項目を設定します。

  • 出力ディレクトリ File オブジェクト

  • ユーザー定義型

  • SSTable スキーマ

  • バッファサイズ

  • プリペアドステートメント

  • オプションでその他のビルダーオプション

そして、build() メソッドを呼び出して CQLSSTableWriter オブジェクトを作成します。

CQLSSTableWriter writer = CQLSSTableWriter.builder()
                                             .inDirectory(outputDir)
                                             .withType(type)
                                             .forTable(schema)
                                             .withBufferSizeInMB(256)
                                             .using(insertStmt).build();

SSTable データを設定します。ユーザー定義型を使用する場合は、各型の UserType オブジェクトを取得します。

UserType userType = writer.getUDType("intType");

結果の SSTable のデータ行を追加します。

writer.addRow(0, 0, "val0", userType.newValue().setInt("a", 0).setInt("b", 0));
   writer.addRow(1, 1, "val1", userType.newValue().setInt("a", 1).setInt("b", 1));
   writer.addRow(2, 2, "val2", userType.newValue().setInt("a", 2).setInt("b", 2));

ライターをクローズして、SSTable を確定します。

writer.close();

CQLSSTableWriter クラスが提供するその他のパブリックメソッドは次のとおりです。

メソッド 説明

addRow(java.util.List<java.lang.Object> values)

新しい行をライターに追加します。CQLSSTableWriter オブジェクトを返します。指定された各値の型は、値が対象となる CQL 列の型に対応する必要があります。Java 型と CQL 型の対応は、www.datastax.com/drivers/java/2.0/apidocs/com/datastax/driver/core/DataType.Name.html#asJavaC lass() に記載されているものと同じです。

addRow(java.util.Map<java.lang.String,java.lang.Object> values)

新しい行をライターに追加します。CQLSSTableWriter オブジェクトを返します。これは、他の addRow メソッドと同等ですが、この SSTable ライターの構築中に使用された INSERT ステートメントの順序で値のリストを取得する代わりに、キーが追加する列の名前であるマップを取得します。マップキーの列名は、宣言された列名が大文字小文字を区別する引用符で囲まれた識別子である場合を除き、小文字にする必要があります。その場合、マップキーは列の正確な大文字小文字を使用する必要があります。values パラメーターは、追加する新しい行を表す列名から列の値へのマップです。列がマップに含まれていない場合、その値は null になります。マップに、この SSTable ライターの作成時に使用された INSERT ステートメントの列の 1 つに対応しないキーが含まれている場合、対応する値は無視されます。

addRow(java.lang.Object…​ values)

新しい行をライターに追加します。CQLSSTableWriter オブジェクトを返します。

CQLSSTableWriter.builder()

CQLSSTableWriter の新しいビルダーを返します。

close()

ライターを閉じます。

rawAddRow(java.nio.ByteBuffer…​ values)

シリアライズされたバイナリ値が既に指定されている場合、新しい行をライターに追加します。CQLSSTableWriter オブジェクトを返します。行の値は、この SSTable ライターで作成するときに使用した挿入ステートメントのバインド変数に対応する必要があります。

rawAddRow(java.util.List<java.nio.ByteBuffer> values)

シリアライズされたバイナリ値が既に指定されている場合、新しい行をライターに追加します。CQLSSTableWriter オブジェクトを返します。行の値は、この SSTable ライターで作成するときに使用した挿入ステートメントのバインド変数に対応する必要があります。

rawAddRow(java.util.Map<java.lang.String, java.nio.ByteBuffer> values)

シリアライズされたバイナリ値が既に指定されている場合、新しい行をライターに追加します。CQLSSTableWriter オブジェクトを返します。行の値は、この SSTable ライターで作成するときに使用した挿入ステートメントのバインド変数に対応する必要があります。

getUDType(String dataType)

UDTValue インスタンスを作成するために使用できる、この SSTable ライターで使用されるユーザー定義型を返します。

CQLSSTableWriter.Builder クラスが提供するその他のパブリックメソッドは次のとおりです。

メソッド 説明

inDirectory(String directory)

SSTable を書き込むディレクトリ。これは必須オプションです。使用するディレクトリは、既に存在し、書き込み可能である必要があります。

inDirectory(File directory)

SSTable を書き込むディレクトリ。これは必須オプションです。使用するディレクトリは、既に存在し、書き込み可能である必要があります。

forTable(String schema)

SSTable を作成するテーブルのスキーマ (CREATE TABLE ステートメント)。指定された CREATE TABLE ステートメントは、キースペース名を含む完全修飾テーブル名を使用する必要があります。これは必須オプションです。

withPartitioner(IPartitioner partitioner)

使用するパーティショナー。デフォルトでは、Murmur3Partitioner が使用されます。これが SSTable が作成されるクラスターで使用されるパーティショナーではない場合は、正しいパーティショナーを指定する必要があります。

using(String insert)

特定の CQL 行に追加する値の順序を定義する INSERT または UPDATE ステートメント。指定された INSERT ステートメントは、キースペース名を含む完全修飾テーブル名を使用する必要があります。さらに、ステートメントはバインド変数を使用する必要があります。これらの変数は、結果の SSTable ライターによって値にバインドされるためです。これは必須オプションです。

withBufferSizeInMiB(int size)

使用するバッファのサイズ。これにより、新しい SSTable として書き込まれる前にバッファリングされるデータの量が定義されます。これは、作成された SSTable が持つデータサイズにほぼ対応します。デフォルトは 128MB であり、1GB ヒープには妥当であるはずです。SSTable ライターの使用中に OutOfMemory 例外が生成された場合は、この値を小さくする必要があります。

withBufferSizeInMB(int size)

非推奨であり、少なくとも次のメジャーリリースまでは利用可能です。新しい名前を持つ同じメソッドである withBufferSizeInMiB(int size) を使用してください。

sorted()

ソートされた入力を想定する CQLSSTableWriter を作成します。このオプションを使用する場合、結果の SSTable ライターは行が SSTable のソート順に追加されることを想定します (そして、行の挿入中にそうでない場合は例外がスローされます)。SSTable のソート順とは、行がパーティションキーがパーティショナー順序に従うように追加されることを意味します。このオプションは、行を順番に提供できる場合にのみ使用する必要があります。これはまれなケースです。ただし、行を順番に提供できる場合は、このソートを使用する方が効率的になる可能性があります。このオプションを使用する場合は、withBufferSizeInMB のような一部のオプションは無視されます。

build()

CQLSSTableWriter オブジェクトを構築します。