一括ロード
Apache Cassandra データの一括ロードは、さまざまなツールでサポートされています。一括ロードするデータは、SSTable 形式である必要があります。Cassandra は、CSV、JSON、XML などの他の形式でのデータの直接ロードをサポートしていません。cqlsh の COPY
コマンドは CSV データをロードできますが、大量のデータには適していません。一括ロードは、次の目的で使用されます。
-
増分バックアップとスナップショットを復元します。バックアップとスナップショットは、すでに SSTable 形式です。
-
既存の SSTable を別のクラスターにロードします。データは、異なるノード数またはレプリケーション戦略を持つことができます。
-
外部データをクラスターにロードします。
一括ロード用ツール
Cassandra は、データの一括ロード用に 2 つのコマンドまたはツールを提供しています
-
Cassandra 一括ローダー (
sstableloader
とも呼ばれる) -
nodetool import
コマンド
Cassandra のインストール bin
ディレクトリが PATH
環境変数に含まれている場合、sstableloader
と nodetool 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.db
と Standard1-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_sec
、server_encryption_options
、client_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> ...
引数 keyspace
、table
名、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)
外部データのバルクロード
外部データを直接バルクロードすることは、sstableloader
や nodetool import
を含む、これまで説明してきたどのツールでもサポートされていません。sstableloader
と nodetool 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 オブジェクトを構築します。 |