在 Hive 中建立外部資料表 - Amazon DynamoDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 Hive 中建立外部資料表

教學課程:使用 Amazon DynamoDB 和 Apache Hive 中,您已建立映射到 DynamoDB 資料表的外部 Hive 資料表。在針對外部資料表發出 HiveQL 陳述式時,讀取和寫入操作會傳遞到 DynamoDB 資料表。

您可以將外部資料表視為指向在別處管理和存放的資料來源的指標。在此情況下,基礎資料來源即為 DynamoDB 資料表。(資料表必須已存在。您無法從 Hive 內建立、更新或刪除 DynamoDB 資料表。) 您可以使用 CREATE EXTERNAL TABLE 陳述式建立外部資料表。之後,您可以使用 HiveQL 來處理 DynamoDB 中的資料,就好像資料本機存放在 Hive 中一樣。

注意

您可以使用 INSERT 陳述式將資料插入到外部資料表中,並使用 SELECT 陳述式從中選取資料。不過,您無法使用 UPDATEDELETE 陳述式來運用資料表中的資料。

如果不再需要外部資料表,您可以使用 DROP TABLE 陳述式將其移除。在本案例中,DROP TABLE 僅移除 Hive 中的外部資料表。它不會影響基礎 DynamoDB 資料表或其中的任何資料。

建立外部資料表語法

以下內容顯示用於建立映射到 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.namedynamodb.column.mapping 提供的值僅在您嘗試存取資料表時由 DynamoDBStorageHandler 類別評估。

資料類型映射

以下資料表顯示 DynamoDB 資料類型和相容的 Hive 資料類型:

DynamoDB 資料類型 Hive 資料類型

字串

STRING

Number

BIGINTDOUBLE

二進位

BINARY

String Set

ARRAY<STRING>

Number Set

ARRAY<BIGINT>ARRAY<DOUBLE>

Binary Set

ARRAY<BINARY>

注意

下列 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 的字串存放。如果您將資料以 Binary 類型從 Amazon S3 或 HDFS 匯入 DynamoDB,則必須確保資料已編碼為 Base64 字串。