Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

在 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 表或其数据。

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 中必须存在 dynamodb.table.name 指定的表。

  • 对于 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

数字

BIGINT 或者 DOUBLE

二进制

BINARY

字符串集

ARRAY<STRING>

数字集

ARRAY<BIGINT> 或者 ARRAY<DOUBLE>

二进制集

ARRAY<BINARY>

注意

DynamoDBStorageHandler 类不支持以下 DynamoDB 数据类型,因此不能与 dynamodb.column.mapping 一起使用:

  • 映射

  • 列表

  • 布尔值

如果您要映射数字类型的 DynamoDB 属性,您必须选择适当的 Hive 类型:

  • Hive 中的 BIGINT 类型为 8 字节有符号整数。这与 Java 中的 long 数据类型相同。

  • Hive 中的 DOUBLE 类型为 8 位双精度浮点数。这与 Java 中的 double 类型相同。

如果 DynamoDB 中存储的数字数据的精度高于您选择的 Hive 数据类型,则访问 DynamoDB 数据可能会导致精度降低。

如果您将二进制类型的数据从 DynamoDB 导出到 Amazon S3 或 HDFS,该数据将作为 Base64 编码的字符串进行存储。如果您将数据从 Amazon S3 或 HDFS 导入为 DynamoDB 二进制类型,您必须确保该数据已编码为 Base64 字符串。