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 DELETE
per 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 |
|
Numero |
|
Binario |
|
Set di stringhe |
|
Set numerico |
|
Set binario |
|
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 datilong
in Java. -
Il tipo Hive
DOUBLE
è per numeri a virgola mobile doppi a 8 bit. È uguale al tipodouble
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.