Cassandraのデータのエクスポートとインポート

 

Cassandraは、他のRDBMSのようなエクスポート/インポートツールを提供します。

  • cqlshコマンドCOPY TO / FROM

    これはcqlコマンドではないことに注意してください。この一連のコマンドを使用して、cassandraと他のRDBMSまたはcassandraの間でデータを移行します。COPY TO / FROMは、CSVファイル形式と標準出力および入力をサポートしています。
    COPY TO / FROMコマンドは、集約データ型もサポートしています。

  • sstable2json / json2sstable

    このツールセットは古く、バージョン3.0では削除されています。したがって、このツールのグループを再度使用することはできません。

  • sstableloader

    Cassandraバルクローダーは、外部データをcassandraにロードできます。また、スナップショットを復元したり、sstableをさまざまな構成のcassandraクラスターにロードしたりすることもできます。
    データ量が多い場合はsstableloaderを、データ量が比較的少ない場合はCOPY TO / FROMの方が時間と労力を節約できます。

  • スナップショット

    スナップショットは、Cassandraの本物のバックアップおよびリカバリツールであり、他のデータベースシステムとのデータ移行のためのツールではありません。厳密に言えば、それはエクスポート/インポートツールとしてカウントされるべきではありません。

  • ETLツール

    多くのサードパーティETL(Extract-Transform-Load)ツールは、他のデータベースからcassandraデータベースへのデータ移行をサポートしています。

コピー先/コピー元

ここでは、COPY TO / FROMコマンドについてのみ説明します。

コマンド形式:

1

2

4

5

6

7

COPY table_name ( column, ...)

FROM ( 'file_name' | STDIN )

WITH option = 'value' AND ...

 

COPY table_name ( column , ... )

TO ( 'file_name' | STDOUT )

WITH option = 'value' AND ...

COPY FROMはcsvファイルまたは標準入力からデータをテーブルにインポートするために使用され、COPY TOはテーブルデータをcsvファイルまたは標準出力にエクスポートするために使用されます。

WITH option = 'value'は、csvファイルの形式、区切り文字、引用符、転送文字、ファイルエンコーディング、時間形式などを指定するために使用されます。詳細については、公式ドキュメントを参照してください。

列名を指定しない場合、すべての列がテーブルメタデータにリストされている順序で出力されます。同様に、csvも同じ順序でデータを編成する場合、COPY FROM中にすべての列名を無視できます。

COPY TO / FROMでは、一部のデータのみをエクスポートおよびインポートする一部の列のみを指定でき、列名は任意の順序で指定できます。

データがテーブルにすでに存在する場合、COPY FROMは既存のデータを切り捨てません。

エクスポートされたデータの例:

1

2

cqlsh> use test ;

cqlsh> COPY airplanes (name, mach, year, manufacturer) TO 'export.csv' ;

インポートされたデータの例:

1

cqlsh> COPY airplanes (name, mach, year, manufacturer) FROM 'import.csv' ;

標準入力を使用し\. てデータをインポートする場合は、文字のみを含む1行を使用  してデータ入力を終了します。

データのインポート時に次のエラーメッセージが表示された場合:

1

2

4

Error starting import process:

 

field larger than field limit (131072)

%d format: a number is required, not NoneType

これは、csvファイルに大容量フィールドが含まれており、python csvモジュールがより大きなフィールドサイズ制限を設定する必要があるためです。

/usr/bin/cqlsh.pyファイルを変更し、csvモジュールをインポートした後、次の行を追加します。

1

csv.field_size_limit(sys.maxsize)

注:カウンター列のあるテーブルでは、COPY TO / FROMを使用してデータをエクスポートおよびインポートできません。

参照:
[1] DataStax EnterpriseおよびCassandraとの間でデータを移動する方法
[2] 2.2でのsstable2json / json2sstableの廃止を検討してください
[3] _csv.Error:フィールドがフィールド制限を超えています(131072)
[4] cassandra データデータ移移

19件の元の記事を公開 賞賛4 170,000回+

おすすめ

転載: blog.csdn.net/u011250186/article/details/105635320