Oracle
 sql >> Database >  >> RDS >> Oracle

Le chiavi primarie e gli indici nel linguaggio di query Hive sono possibili o no?

L'indicizzazione di Hive è stata introdotta in Hive 0.7.0 (HIVE-417) e rimossa in Hive 3.0 (HIVE-18448). Leggere i commenti in questo Jira. La funzione era completamente inutile in Hive. Questi indici erano troppo costosi per i big data, RIP.

A partire da Hive 2.1.0 (HIVE-13290) Hive include il supporto per i vincoli di chiave primaria ed esterna non convalidati . Questi vincoli non sono convalidati, un sistema a monte deve garantire l'integrità dei dati prima che vengano caricati in Hive. Questi vincoli sono utili per gli strumenti che generano diagrammi ER e query. Anche tali vincoli non convalidati sono utili come autodocumentazione. Puoi facilmente scoprire cosa dovrebbe essere un PK se la tabella ha tale vincolo.

Nel database Oracle Unique, i vincoli PK e FK sono supportati da indici, quindi possono funzionare velocemente e sono davvero utili. Ma non è così che funziona Hive e per cosa è stato progettato.

Uno scenario abbastanza normale è quando hai caricato file molto grandi con dati semi-strutturati in HDFS. Costruire un indice su di esso è troppo costoso e senza l'indice per controllare la violazione PK è possibile solo scansionare tutti i dati. E normalmente non puoi imporre vincoli in BigData. Il processo a monte può occuparsi dell'integrità e della coerenza dei dati, ma ciò non garantisce che alla fine non avrai una violazione PK in Hive in alcune grandi tabelle caricate da fonti diverse.

Alcuni formati di archiviazione di file come ORC hanno "indici" interni leggeri per accelerare il filtraggio e abilitare il predicate push down (PPD), nessun vincolo PK e FK viene implementato utilizzando tali indici. Questo non può essere fatto perché normalmente puoi avere molti di questi file appartenenti alla stessa tabella in Hive e anche i file possono avere schemi diversi. Hive creato per petabyte ed è possibile elaborare petabyte in un'unica esecuzione, i dati possono essere semi-strutturati, i file possono avere schemi diversi. Hadoop non supporta le scritture casuali e questo aggiunge ulteriori complicazioni e costi se si desidera ricostruire gli indici.