Criar uma tabela externa no Hive - Amazon DynamoDB

Criar uma tabela externa no Hive

No Tutorial: Como trabalhar com o Amazon DynamoDB e o Apache Hive, você criou uma tabela externa do Hive mapeada para uma tabela do DynamoDB. Quando você emitiu instruções HiveQL na tabela externa, as operações de leitura e gravação foram repassadas para a tabela do DynamoDB.

Você pode pensar em uma tabela externa como um ponteiro para uma fonte de dados que é gerenciada e armazenada em outro lugar. Neste caso, a fonte de dados subjacente é uma tabela do DynamoDB. (A tabela já deve existir. Não é possível criar, atualizar ou excluir uma tabela do DynamoDB via Hive.) Você usa a instrução CREATE EXTERNAL TABLE para criar a tabela externa. Depois disso, você pode usar HiveQL para trabalhar com dados no DynamoDB, como se esses dados estivessem armazenados localmente no Hive.

nota

Você pode usar as instruções INSERT para inserir dados em uma tabela externa e as instruções SELECT para selecionar dados nela. No entanto, você não pode usar as instruções UPDATE ou DELETE para manipular dados na tabela.

Se não precisar mais da tabela externa, remova-a usando a instrução DROP TABLE. Neste caso, DROP TABLE remove apenas a tabela externa no Hive. Ele não afeta a tabela subjacente do DynamoDB ou qualquer um dos seus dados.

Sintaxe CREATE EXTERNAL TABLE

As considerações a seguir mostram a sintaxe HiveQL para criação de uma tabela externa do Hive mapeada em uma tabela do 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..." );

A linha 1 é o início da instrução CREATE EXTERNAL TABLE, na qual você fornece o nome da tabela do Hive (hive_table) que você deseja criar.

A linha 2 especifica as colunas e os tipos de dados de hive_table. É necessário definir colunas e tipos de dados que correspondem aos atributos da tabela do DynamoDB.

A linha 3 é a cláusula STORED BY, onde você especifica uma classe que lida com o gerenciamento de dados entre o Hive e a tabela do DynamoDB. Para o DynamoDB, STORED BY deve ser definido como 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'.

A linha 4 é o início da cláusula TBLPROPERTIES, na qual você define os parâmetros a seguir para DynamoDBStorageHandler:

  • dynamodb.table.name: o nome da tabela do DynamoDB.

  • dynamodb.column.mapping: pares de nomes de coluna na tabela do Hive e seus atributos correspondentes na tabela do DynamoDB. Cada par tem o formato hive_column_name: dynamodb_attribute_name e os pares são separados por vírgulas.

Observe o seguinte:

  • O nome da tabela do Hive não precisa ser o mesmo nome da tabela do DynamoDB.

  • Os nomes das colunas da tabela do Hive não precisam ser os mesmos que os da tabela do DynamoDB.

  • A tabela especificada por dynamodb.table.name deve existir no DynamoDB.

  • Para dynamodb.column.mapping:

    • Você deve mapear os atributos de esquema de chaves da tabela do DynamoDB. Isso inclui a chave de partição e a chave de classificação (se houver).

    • Não é necessário mapear os atributos que não são chaves da tabela do DynamoDB. No entanto, você não verá os dados desses atributos ao consultar a tabela do Hive.

    • Se os tipos de dados de uma coluna de tabela do Hive e um atributo do DynamoDB forem incompatíveis, você verá NULL nessas colunas ao consultar a tabela do Hive.

nota

A instrução CREATE EXTERNAL TABLE não executa qualquer validação na cláusula TBLPROPERTIES. Os valores fornecidos para dynamodb.table.name e dynamodb.column.mapping são avaliados apenas pela classe DynamoDBStorageHandler quando você tenta acessar a tabela.

Mapeamentos de tipo de dados

A tabela a seguir mostra os tipos de dados do DynamoDB e os tipos de dados compatíveis do Hive:

Tipo de dados do DynamoDB Tipo de dados do Hive

String

STRING

Número

BIGINT ou DOUBLE

Binário

BINARY

String Set

ARRAY<STRING>

Number Set

ARRAY<BIGINT> ou ARRAY<DOUBLE>

Binary Set

ARRAY<BINARY>

nota

Os tipos de dados do DynamoDB a seguir não são compatíveis com a classe DynamoDBStorageHandler, portanto, eles não podem ser usados com dynamodb.column.mapping:

  • Mapa

  • Listar

  • Booleano

  • Null

No entanto, se precisar trabalhar com esses tipos de dados, você poderá criar uma única entidade chamada item que represente todo o item do DynamoDB como um mapa de strings para chaves e valores no mapa. Para ter mais informações, consulte Copiar dados sem um mapeamento de colunas.

Caso deseje mapear um atributo do DynamoDB do tipo Number, será necessário escolher um tipo apropriado do Hive:

  • O tipo do Hive BIGINT é para inteiros assinados de 8 bytes. Ele é o mesmo que o tipo de dados long em Java.

  • O tipo do Hive DOUBLE é para números de ponto flutuante de dupla precisão com 8 bits. Ele é o mesmo que o tipo double em Java.

Se você tiver dados numéricos armazenados no DynamoDB que tenham uma maior precisão do que o tipo de dados do Hive que você escolheu, então, acessar os dados do DynamoDB poderia causar uma perda de precisão.

Se você exportar dados do tipo Binary do DynamoDB para (Amazon S3) ou HDFS, os dados serão armazenados como uma string codificada por Base64. Caso importe dados do Amazon S3 ou HDFS para o tipo Binary do DynamoDB, você deverá garantir que os dados sejam codificados como uma string Base64.