Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Membuat tabel eksternal di Hive
Di Tutorial: Menggunakan Amazon DynamoDB dan Apache Hive, Anda membuat tabel Hive eksternal yang dipetakan ke tabel DynamoDB. Ketika Anda mengeluarkan pernyataan HiveQL terhadap tabel eksternal, operasi baca dan tulis diteruskan ke tabel DynamoDB.
Anda dapat mempertimbangkan tabel eksternal sebagai pengarah ke sumber data yang dikelola dan disimpan di tempat lain. Dalam hal ini, sumber data yang mendasarinya adalah tabel DynamoDB. (Tabel harus sudah ada. Anda tidak dapat membuat, memperbarui, atau menghapus tabel DynamoDB dari dalam Hive.) Anda menggunakan pernyataan CREATE EXTERNAL TABLE
untuk membuat tabel eksternal. Setelah itu, Anda dapat menggunakan HiveQL untuk menggunakan data di DynamoDB, seolah-olah data disimpan secara lokal di dalam Hive.
catatan
Anda dapat menggunakan pernyataan INSERT
untuk memasukkan data ke dalam tabel eksternal dan pernyataan SELECT
untuk memilih data dari tabel eksternal. Namun, Anda tidak dapat menggunakan pernyataan UPDATE
atau DELETE
untuk memanipulasi data dalam tabel tersebut.
Jika tidak membutuhkan tabel eksternal lagi, Anda dapat menghapusnya menggunakan pernyataan DROP
TABLE
. Dalam kasus ini, DROP TABLE
hanya menghapus tabel eksternal di Hive. Tabel DynamoDB yang mendasarinya atau datanya tidak akan terpengaruh.
CREATEEXTERNALTABLEsintaks
Berikut ini menunjukkan sintaks HiveQL untuk membuat tabel Hive eksternal yang dipetakan ke tabel DynamoDB:
CREATE EXTERNAL TABLE
hive_table
(hive_column1_name
hive_column1_datatype
,hive_column2_name
hive_column2_datatype
...) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ( "dynamodb.table.name" ="dynamodb_table"
, "dynamodb.column.mapping" = "hive_column1_name
:dynamodb_attribute1_name
,hive_column2_name
:dynamodb_attribute2_name
..." );
Baris 1 adalah awal dari pernyataan CREATE EXTERNAL TABLE
, Anda menyediakan nama untuk tabel Hive (hive_table) yang ingin Anda buat.
Baris 2 menentukan kolom dan jenis data untuk hive_table. Anda perlu menentukan kolom dan jenis data yang sesuai dengan atribut di tabel DynamoDB.
Baris 3 adalah klausul STORED BY
, Anda menentukan kelas yang menangani manajemen data antara Hive dan tabel DynamoDB. Untuk DynamoDB, STORED BY
harus diatur ke 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
.
Baris 4 adalah awal dari klausul TBLPROPERTIES
, Anda menentukan parameter berikut untuk DynamoDBStorageHandler
:
-
dynamodb.table.name
—nama tabel DynamoDB. -
dynamodb.column.mapping
—pasang nama kolom di tabel Hive dan atributnya yang sesuai di tabel DynamoDB. Setiap pasangan memiliki format hive_column_name:dynamodb_attribute_name, dan pasangan dipisahkan dengan koma.
Perhatikan hal-hal berikut:
-
Nama tabel Hive tidak harus sama dengan nama tabel DynamoDB.
-
Nama kolom tabel Hive tidak harus sama dengan nama kolom di tabel DynamoDB.
-
Tabel yang ditentukan oleh
dynamodb.table.name
harus ada di DynamoDB. -
Untuk
dynamodb.column.mapping
:-
Anda harus memetakan atribut skema kunci untuk tabel DynamoDB. Ini termasuk kunci partisi dan kunci urutan (jika ada).
-
Anda tidak harus memetakan atribut non-kunci tabel DynamoDB. Namun, Anda tidak akan melihat data apa pun dari atribut tersebut saat Anda mengkueri tabel Hive.
-
Jika jenis data dari kolom tabel Hive dan atribut DynamoDB tidak kompatibel, Anda akan melihat
NULL
dalam kolom tersebut saat Anda mengkueri tabel Hive.
-
catatan
Pernyataan CREATE EXTERNAL TABLE
tidak melakukan validasi apa pun pada klausul TBLPROPERTIES
. Nilai-nilai yang Anda berikan untuk dynamodb.table.name
dan dynamodb.column.mapping
hanya dievaluasi oleh kelas DynamoDBStorageHandler
Anda mencoba mengakses tabel.
Pemetaan jenis data
Tabel berikut menunjukkan jenis data DynamoDB dan jenis data Hive yang kompatibel:
Jenis Data DynamoDB | Jenis Data Hive |
---|---|
String |
|
Angka |
|
Biner |
|
Set String |
|
Set Angka |
|
Set Biner |
|
catatan
Jenis data DynamoDB berikut tidak didukung oleh kelas DynamoDBStorageHandler
, sehingga tidak dapat digunakan dengan dynamodb.column.mapping
:
-
Peta
-
Daftar
-
Boolean
-
Null
Namun, jika perlu menggunakan jenis data ini, Anda dapat membuat satu entitas yang disebut item
yang mewakili seluruh item DynamoDB sebagai peta string untuk kunci dan nilai di peta. Untuk informasi selengkapnya, silakan lihat Menyalin data tanpa pemetaan kolom
Jika ingin memetakan atribut DynamoDB jenis Angka, Anda harus memilih jenis Hive yang sesuai:
-
Jenis
BIGINT
Hive adalah untuk angka bulat bertanda 8-byte. Itu sama dengan jenis datalong
di Java. -
Jenis
DOUBLE
Hive adalah untuk angka floating-point presisi ganda 8-bit. Itu sama dengan jenisdouble
di Java.
Jika Anda memiliki data numerik yang disimpan di DynamoDB yang memiliki presisi lebih tinggi dibandingkan jenis data Hive yang Anda pilih, maka mengakses data DynamoDB dapat menyebabkan hilangnya presisi.
Jika Anda mengekspor data tipe Binary dari DynamoDB ke (Amazon S3) HDFS atau, data disimpan sebagai string yang dikodekan Base64. Jika Anda mengimpor data dari Amazon S3 atau HDFS ke tipe DynamoDB Binary, Anda harus memastikan data dikodekan sebagai string Base64.