Creazione di una tabella esterna in Hive - Amazon DynamoDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Creazione di una tabella esterna in Hive

Nel Tutorial: Utilizzo di Amazon DynamoDB e Apache Hive, è stata creata una tabella Hive esterna mappata a una tabella DynamoDB. Quando sono state emesse istruzioni HiveQL sulla tabella esterna, le operazioni di lettura e scrittura sono state passate alla tabella DynamoDB.

È possibile considerare una tabella esterna come un puntatore a un'origine dati gestita e memorizzata altrove. In questo caso, l'origine dati sottostante è una tabella DynamoDB. La tabella deve esistere già. Non è possibile creare, aggiornare o eliminare una tabella DynamoDB da Hive. Per creare la tabella esterna, è possibile utilizzare l'istruzione CREATE EXTERNAL TABLE. Successivamente, sarà possibile utilizzare HiveQL per lavorare con i dati in DynamoDB come se tali dati fossero archiviati in locale all'interno di Hive.

Nota

È possibile utilizzare le istruzioni INSERT per inserire dati in una tabella esterna e le istruzioni SELECT per selezionare i dati da essa. Tuttavia, non è possibile utilizzare le istruzioni UPDATE o DELETEper manipolare i dati nella tabella.

Se la tabella esterna non è più necessaria, puoi rimuoverla utilizzando l'istruzione DROP TABLE. In questo caso, DROP TABLE rimuove solo la tabella esterna in Hive. Non influisce sulla tabella DynamoDB sottostante o sui relativi dati.

Sintassi di CREATE EXTERNAL TABLE

Di seguito viene illustrata la sintassi HiveQL per la creazione di una tabella Hive esterna mappata a una tabella 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..." );

La riga 1 è l'inizio dell'istruzione CREATE EXTERNAL TABLE, in cui si fornisce il nome della tabella Hive (hive_table) che si desidera creare.

La riga 2 specifica le colonne e i tipi di dati per hive_table. È necessario definire colonne e tipi di dati che corrispondono agli attributi nella tabella DynamoDB.

La riga 3 è la clausola STORED BY, in cui si specifica una classe incaricata della gestione dei dati tra Hive e la tabella DynamoDB. Per DynamoDB ,STORED BY deve essere impostato su 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'.

La riga 4 è l'inizio della clausola TBLPROPERTIES, in cui si definiscono i seguenti parametri per DynamoDBStorageHandler:

  • dynamodb.table.name: il nome della tabella DynamoDB.

  • dynamodb.column.mapping: le coppie di nomi di colonna nella tabella Hive e i relativi attributi nella tabella DynamoDB. Ogni coppia ha il formato hive_column_name:dynamodb_attribute_name e le coppie sono separate da virgole.

Tieni presente quanto segue:

  • Il nome della tabella Hive non deve essere uguale al nome della tabella DynamoDB.

  • Il nome delle colonne della tabella Hive non devono essere uguali a quelli nella tabella DynamoDB.

  • La tabella specificata da dynamodb.table.name deve già essere presente in DynamoDB.

  • Per dynamodb.column.mapping:

    • È necessario mappare gli attributi dello schema chiave per la tabella DynamoDB. Questa operazione include la chiave di partizione e la chiave di ordinamento (se presente).

    • Non è necessario mappare gli attributi non chiave della tabella DynamoDB. Tuttavia, quando si esegue una query sulla tabella Hive, non verrà visualizzato alcun dato da tali attributi.

    • Se i tipi di dati di una colonna di tabella Hive e di un attributo DynamoDB non sono compatibili, in queste colonne verrà visualizzato NULL quando si esegue una query sulla tabella Hive.

Nota

L'istruzione CREATE EXTERNAL TABLE non esegue alcuna convalida sulla clausola TBLPROPERTIES. I valori forniti per dynamodb.table.name e dynamodb.column.mapping vengono valutati solo dalla classe DynamoDBStorageHandler quando si prova ad accedere alla tabella.

Mappature dei tipi di dati

Nella tabella seguente vengono illustrati i tipi di dati DynamoDB e i tipi di dati Hive compatibili:

Tipo di dati DynamoDB Tipo di dati Hive

Stringa

STRING

Numero

BIGINT o DOUBLE

Binario

BINARY

Set di stringhe

ARRAY<STRING>

Set numerico

ARRAY<BIGINT> o ARRAY<DOUBLE>

Set binario

ARRAY<BINARY>

Nota

I seguenti tipi di dati DynamoDB non sono supportati dalla classe DynamoDBStorageHandler, quindi non possono essere utilizzati con dynamodb.column.mapping:

  • Eseguire la mappatura

  • Elenco

  • Booleano

  • Null

Tuttavia, se devi lavorare con questi tipi di dati, puoi creare una singola entità chiamata item che rappresenti l'intero elemento DynamoDB come mappa di stringhe sia per le chiavi che per i valori della mappa. Per ulteriori informazioni, consulta Copia di dati senza mappature di colonne

Se desideri mappare un attributo DynamoDB di tipo Number, è necessario scegliere un tipo Hive appropriato:

  • Il tipo Hive BIGINT è per interi firmati da 8 byte. È uguale al tipo di dati long in Java.

  • Il tipo Hive DOUBLE è per numeri a virgola mobile doppi a 8 bit. È uguale al tipo double in Java.

Se si dispone di dati numerici memorizzati in DynamoDB con una precisione superiore rispetto al tipo di dati Hive scelto, l'accesso ai dati DynamoDB potrebbe causare una perdita di precisione.

Se si esportano dati di tipo Binary da DynamoDB in (Amazon S3) o HDFS, i dati vengono archiviati come stringa con codifica Base64. Se si importano dati da Amazon S3 o HDFS nel tipo Binary di DynamoDB, assicurarsi che siano codificati come stringa Base64.