本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Hive 中建立外部資料表
在 教學課程:使用 Amazon DynamoDB 和 Apache Hive 中,您已建立映射到 DynamoDB 資料表的外部 Hive 資料表。在針對外部資料表發出 HiveQL 陳述式時,讀取和寫入操作會傳遞到 DynamoDB 資料表。
您可以將外部資料表視為指向在別處管理和存放的資料來源的指標。在此情況下,基礎資料來源即為 DynamoDB 資料表。(資料表必須已存在。您無法從 Hive 內建立、更新或刪除 DynamoDB 資料表。) 您可以使用 CREATE EXTERNAL TABLE
陳述式建立外部資料表。之後,您可以使用 HiveQL 來處理 DynamoDB 中的資料,就好像資料本機存放在 Hive 中一樣。
注意
您可以使用 INSERT
陳述式將資料插入到外部資料表中,並使用 SELECT
陳述式從中選取資料。不過,您無法使用 UPDATE
或 DELETE
陳述式來運用資料表中的資料。
如果不再需要外部資料表,您可以使用 DROP
TABLE
陳述式將其移除。在本案例中,DROP TABLE
僅移除 Hive 中的外部資料表。它不會影響基礎 DynamoDB 資料表或其中的任何資料。
CREATE EXTERNAL TABLE 語法
以下內容顯示用於建立映射到 DynamoDB 資料表的外部 Hive 資料表的 HiveQL 語法:
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
..." );
第 1 列為 CREATE EXTERNAL TABLE
陳述式的開始,可讓您在其中提供要建立的 Hive 資料表 (hive_table)。
第 2 列指定 hive_table 的資料欄和資料類型。您需要定義與 DynamoDB 資料表中屬性對應的資料欄和資料類型。
第 3 列是 STORED BY
子句,可讓您在其中指定類別來處理 Hive 和 DynamoDB 資料表之間的資料管理。針對 DynamoDB,STORED BY
應設定為 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
。
第 4 列為 TBLPROPERTIES
子句的開始,可讓您在其中為 DynamoDBStorageHandler
定義下列參數:
-
dynamodb.table.name
:DynamoDB 資料表的名稱。 -
dynamodb.column.mapping
:Hive 資料表中資料欄名稱的配對,以及其在 DynamoDB 資料表中的對應屬性。每個配對形式為 hive_column_name:dynamodb_attribute_name,且配對以逗號分隔。
注意下列事項:
-
Hive 資料表名稱的名稱不一定要與 DynamoDB 資料表名稱相同。
-
Hive 資料表資料欄名稱不一定要與 DynamoDB 資料表中的名稱相同。
-
由
dynamodb.table.name
指定的資料表必須存在於 DynamoDB 中。 -
在
dynamodb.column.mapping
中:-
您必須映射 DynamoDB 資料表的金鑰結構描述屬性。這包含分割區索引鍵和排序索引鍵 (若有)。
-
您不需要映射 DynamoDB 資料表的非索引鍵屬性。不過,在查詢 Hive 資料表時,您不會看到這些屬性的任何資料。
-
如果 Hive 資料表資料欄的資料類型與 DynamoDB 屬性的資料類型不相容,在查詢 Hive 資料表時,您會在這些資料欄中看到
NULL
。
-
注意
此 CREATE EXTERNAL TABLE
陳述式不會對 TBLPROPERTIES
子句執行任何驗證。您為 dynamodb.table.name
和 dynamodb.column.mapping
提供的值僅在您嘗試存取資料表時由 DynamoDBStorageHandler
類別評估。
資料類型映射
以下資料表顯示 DynamoDB 資料類型和相容的 Hive 資料類型:
DynamoDB 資料類型 | Hive 資料類型 |
---|---|
字串 |
|
Number |
|
二進位 |
|
String Set |
|
Number Set |
|
Binary Set |
|
注意
下列 DynamoDB 資料類型不受 DynamoDBStorageHandler
類別支援,因此無法與 dynamodb.column.mapping
搭配使用:
-
Map
-
清單
-
Boolean
-
Null
但是,如果您需要使用這些資料類型,則可以建立名為 item
的單一實體來代表整個 DynamoDB 項目,做為對應中索引鍵和值的字串對應。如需詳細資訊,請參閱 在無資料欄映射的情況下複製資料
如果要映射 Number 類型的 DynamoDB 屬性,則必須選擇適當的 Hive 類型:
-
Hive
BIGINT
類型用於 8 位元組帶正負號的整數。該類型與 Java 中的long
資料類型相同。 -
Hive
DOUBLE
類型用於 8 位元雙精度浮點數。該類型與 Java 中的double
類型相同。
如果 DynamoDB 中儲存的數值資料精確度高於您選擇的 Hive 資料類型,則存取 DynamoDB 資料可能會導致精確度損失。
如果您將 Binary 類型的資料從 DynamoDB 匯出至 (Amazon S3) 或 HDFS,資料會儲存為 Base64-encoded字串。如果您將資料從 Amazon S3 匯入HDFS或匯入 DynamoDB Binary 類型,您必須確保資料編碼為 Base64 字串。