Il modello di creazione di query comuni in HiveQL (e SQL in generale) consente di selezionare tutte le colonne (SELECT *
) o un set di colonne esplicitamente specificato (SELECT A, B, C
). SQL non ha un meccanismo integrato per selezionare tutto tranne un insieme specifico di colonne.Hive UDF per la selezione di tutte tranne alcune colonne
Esistono vari meccanismi per l'esclusione di alcune colonne come indicato in this SO question ma nessuno si applica in modo naturale a HiveQL. (Per esempio, l'idea di creare una tabella temporanea con SELECT *
poi ALTER TABLE DROP
alcune delle sue colonne sarebbe devastare in un ambiente di grande di dati.)
Ignorando la discussione ideologica sul fatto che si tratta di una buona idea per selezionare tutte ma alcune colonne , questa domanda riguarda i possibili modi per estendere Hive con questa funzionalità.
Prima di Hive 0.13.0 SELECT può utilizzare colonne basate su espressioni regolari, ad esempio property_.*
all'interno di una stringa tra virgolette. La risposta di @ invoketheshell sotto si riferisce a questa capacità, ma ha un costo, che è, quando questa funzionalità è attiva, Hive non può accettare colonne con caratteri non standard al loro interno, ad esempio $foo
o x/y
. Ecco perché gli sviluppatori di Hive hanno disattivato questo comportamento per impostazione predefinita in 0.13.0. Sto cercando una soluzione generica che funzioni per qualsiasi nome di colonna.
Una UDF generica per la generazione di tabelle (UDTF) potrebbe fare questo perché può manipulate the schema. Dal momento che non genereremo nuove righe, esiste un modo per risolvere questo problema utilizzando una UDF basata su file semplice?
Questo sembra un problema comune con molti post sul Web che mostrano come risolverlo per vari database, ma non sono stato in grado di trovare una soluzione per Hive. C'è codice da qualche parte che fa questo?
Questo errore non risolto può causare problemi, poiché significa che non è possibile eseguire un'UDF, ad es. all_except (*, excluded_column1, excluded_column2) https://issues.apache.org/jira/browse/HIVE-1459 – mattinbits
Grazie a @mattinbits. Ho votato per il problema e incoraggiato anche gli altri a farlo. – Sim