Menyalin data antara DynamoDB dan Amazon S3 - Amazon DynamoDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menyalin data antara DynamoDB dan Amazon S3

Jika memiliki data dalam tabel DynamoDB, Anda dapat menggunakan Hive untuk menyalin data tersebut ke bucket Amazon S3.

Anda dapat melakukannya jika ingin membuat arsip data dalam tabel DynamoDB Anda. Misalnya, anggaplah lingkungan pengujian Anda mengharuskan Anda menggunakan kumpulan data pengujian dasar di DynamoDB. Anda dapat menyalin data dasar ke bucket Amazon S3, lalu menjalankan pengujian. Setelah itu, Anda dapat mengatur ulang lingkungan pengujian dengan memulihkan data dasar dari bucket Amazon S3 ke DynamoDB.

Jika Anda bekerja menggunakan Tutorial: Menggunakan Amazon DynamoDB dan Apache Hive, maka Anda sudah memiliki bucket Amazon S3 yang berisi log Amazon EMR. Anda dapat menggunakan bucket ini untuk contoh di bagian ini, jika Anda tahu jalur root untuk bucket:

  1. Buka konsol Amazon EMR di https://console.aws.amazon.com/emr.

  2. Untuk Nama, pilih klaster Anda.

  3. URI tercantum di URI Log di bagian Detail Konfigurasi.

  4. Membuat catatan tentang jalur root bucket. Konvensi penamaan adalah:

    s3://aws-logs-accountID-region

    di mana accountID adalah ID akun AWS Anda dan wilayah adalah wilayah untuk AWS bucket.

catatan

Untuk contoh ini, kita akan menggunakan subpath dalam bucket, seperti dalam contoh ini:

s3://aws-logs-123456789012-us-west-2/hive-test

Prosedur berikut ditulis dengan asumsi Anda mengikuti langkah-langkah di tutorial dan memiliki tabel eksternal di DynamoDB bernama ddb_features.

Menyalin data menggunakan format default Hive

contoh Dari DynamoDB ke Amazon S3

Gunakan pernyataan INSERT OVERWRITE untuk menulis langsung ke Amazon S3.

INSERT OVERWRITE DIRECTORY 's3://aws-logs-123456789012-us-west-2/hive-test' SELECT * FROM ddb_features;

File data di Amazon S3 terlihat seperti ini:

920709^ASoldiers Farewell Hill^ASummit^ANM^A32.3564729^A-108.33004616135 1178153^AJones Run^AStream^APA^A41.2120086^A-79.25920781260 253838^ASentinel Dome^ASummit^ACA^A37.7229821^A-119.584338133 264054^ANeversweet Gulch^AValley^ACA^A41.6565269^A-122.83614322900 115905^AChacaloochee Bay^ABay^AAL^A30.6979676^A-87.97388530

Setiap bidang dipisahkan oleh karakter SOH (awal mulai, 0x01). Di file, SOH muncul sebagai ^A.

contoh Dari Amazon S3 ke DynamoDB
  1. Buat tabel eksternal yang menunjuk ke data yang belum diformat di Amazon S3.

    CREATE EXTERNAL TABLE s3_features_unformatted (feature_id BIGINT, feature_name STRING , feature_class STRING , state_alpha STRING, prim_lat_dec DOUBLE , prim_long_dec DOUBLE , elev_in_ft BIGINT) LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
  2. Salin data ke DynamoDB.

    INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_unformatted;

Menyalin data dengan format yang ditentukan pengguna

Jika ingin menentukan karakter pemisah bidang Anda sendiri, Anda dapat membuat tabel eksternal yang dipetakan ke bucket Amazon S3. Anda dapat menggunakan teknik ini untuk membuat file data dengan nilai yang dipisahkan oleh koma (CSV).

contoh Dari DynamoDB ke Amazon S3
  1. Buat tabel eksternal Hive yang dipetakan ke Amazon S3. Jika Anda melakukannya, pastikan jenis data konsisten dengan jenis data yang ada di tabel eksternal DynamoDB.

    CREATE EXTERNAL TABLE s3_features_csv (feature_id BIGINT, feature_name STRING, feature_class STRING, state_alpha STRING, prim_lat_dec DOUBLE, prim_long_dec DOUBLE, elev_in_ft BIGINT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
  2. Salin data dari DynamoDB.

    INSERT OVERWRITE TABLE s3_features_csv SELECT * FROM ddb_features;

File data di Amazon S3 terlihat seperti ini:

920709,Soldiers Farewell Hill,Summit,NM,32.3564729,-108.3300461,6135 1178153,Jones Run,Stream,PA,41.2120086,-79.2592078,1260 253838,Sentinel Dome,Summit,CA,37.7229821,-119.58433,8133 264054,Neversweet Gulch,Valley,CA,41.6565269,-122.8361432,2900 115905,Chacaloochee Bay,Bay,AL,30.6979676,-87.9738853,0
contoh Dari Amazon S3 ke DynamoDB

Dengan pernyataan HiveQL tunggal, Anda dapat mengisi tabel DynamoDB menggunakan data dari Amazon S3:

INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_csv;

Menyalin data tanpa pemetaan kolom

Anda dapat menyalin data dari DynamoDB dalam format mentah dan menuliskannya ke Amazon S3 tanpa menentukan jenis data atau pemetaan kolom. Anda dapat menggunakan metode ini untuk membuat arsip data DynamoDB dan menyimpannya di Amazon S3.

contoh Dari DynamoDB ke Amazon S3
  1. Buat tabel eksternal yang terkait dengan tabel DynamoDB Anda. (Tidak ada dynamodb.column.mapping dalam pernyataan HiveQL ini.)

    CREATE EXTERNAL TABLE ddb_features_no_mapping (item MAP<STRING, STRING>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Features");

  2. Buat tabel eksternal lain yang terkait dengan bucket Amazon S3 Anda.

    CREATE EXTERNAL TABLE s3_features_no_mapping (item MAP<STRING, STRING>) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
  3. Salin data dari DynamoDB ke Amazon S3.

    INSERT OVERWRITE TABLE s3_features_no_mapping SELECT * FROM ddb_features_no_mapping;

File data di Amazon S3 terlihat seperti ini:

Name^C{"s":"Soldiers Farewell Hill"}^BState^C{"s":"NM"}^BClass^C{"s":"Summit"}^BElevation^C{"n":"6135"}^BLatitude^C{"n":"32.3564729"}^BId^C{"n":"920709"}^BLongitude^C{"n":"-108.3300461"} Name^C{"s":"Jones Run"}^BState^C{"s":"PA"}^BClass^C{"s":"Stream"}^BElevation^C{"n":"1260"}^BLatitude^C{"n":"41.2120086"}^BId^C{"n":"1178153"}^BLongitude^C{"n":"-79.2592078"} Name^C{"s":"Sentinel Dome"}^BState^C{"s":"CA"}^BClass^C{"s":"Summit"}^BElevation^C{"n":"8133"}^BLatitude^C{"n":"37.7229821"}^BId^C{"n":"253838"}^BLongitude^C{"n":"-119.58433"} Name^C{"s":"Neversweet Gulch"}^BState^C{"s":"CA"}^BClass^C{"s":"Valley"}^BElevation^C{"n":"2900"}^BLatitude^C{"n":"41.6565269"}^BId^C{"n":"264054"}^BLongitude^C{"n":"-122.8361432"} Name^C{"s":"Chacaloochee Bay"}^BState^C{"s":"AL"}^BClass^C{"s":"Bay"}^BElevation^C{"n":"0"}^BLatitude^C{"n":"30.6979676"}^BId^C{"n":"115905"}^BLongitude^C{"n":"-87.9738853"}

Setiap bidang diawali dengan karakter STX (awal teks, 0x02) dan diakhiri dengan karakter ETX (akhir teks, 0x03). Dalam file tersebut, STX muncul sebagai ^B dan ETX muncul sebagai ^C.

contoh Dari Amazon S3 ke DynamoDB

Dengan pernyataan HiveQL tunggal, Anda dapat mengisi tabel DynamoDB menggunakan data dari Amazon S3:

INSERT OVERWRITE TABLE ddb_features_no_mapping SELECT * FROM s3_features_no_mapping;

Melihat Data di Amazon S3

Jika menggunakan SSH untuk menghubungkan ke simpul pemimpin, Anda dapat menggunakan AWS Command Line Interface (AWS CLI) untuk mengakses data yang ditulis Hive ke Amazon S3.

Langkah-langkah berikut ditulis dengan asumsi Anda telah menyalin data dari DynamoDB ke Amazon S3 menggunakan salah satu prosedur di bagian ini.

  1. Jika saat ini Anda berada di prompt perintah Hive, keluarlah ke prompt perintah Linux.

    hive> exit;
  2. Cantumkan konten direktori hive-test di bucket Amazon S3 Anda. (Di sinilah Hive menyalin data dari DynamoDB.)

    aws s3 ls s3://aws-logs-123456789012-us-west-2/hive-test/

    Responsnya akan tampak mirip dengan ini:

    2016-11-01 23:19:54 81983 000000_0

    Nama file (000000_0) dihasilkan sistem.

  3. (Opsional) Anda dapat menyalin file data dari Amazon S3 ke sistem file lokal di simpul pemimpin. Setelah melakukannya, Anda dapat menggunakan utilitas baris perintah Linux standar untuk menggunakan data dalam file.

    aws s3 cp s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 .

    Responsnya akan tampak mirip dengan ini:

    download: s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 to ./000000_0

    catatan

    Kapasitas sistem file lokal di simpul pemimpin terbatas. Jangan gunakan perintah ini dengan file yang lebih besar dari ruang yang tersedia di sistem file lokal.