在 Hive 中创建外部表 - Amazon DynamoDB
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 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 语法

下面显示了用于创建映射到 HiveQL 表的外部 Hive 表的 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..." );

第 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.mappingHive 表中的列名称的对及其在 — 表中的对应属性。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

数字

BIGINT 或者 DOUBLE

二进制

BINARY

字符串集

ARRAY<STRING>

数字集

ARRAY<BIGINT> 或者 ARRAY<DOUBLE>

二进制集

ARRAY<BINARY>

注意

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

  • 映射

  • List

  • Boolean

  • Null

如果要映射数字类型的 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 字符串。