web-dev-qa-db-fra.com

Hive a-t-il quelque chose d'équivalent à DUAL?

Je voudrais courir des déclarations comme

SELECT date_add('2008-12-31', 1) FROM DUAL

Hive (s'exécutant sur Amazon EMR) a-t-il quelque chose de similaire?

17
jbreed
10
Jeff Hammerbacher

La meilleure solution est de ne pas mentionner le nom de la table.

select 1+1;

Donne le résultat 2. Mais le pauvre Hive a besoin de générer une carte pour le trouver!

22
Harikrishnan Ck

Pour créer une double table dans Hive comportant une colonne et une ligne, vous pouvez procéder comme suit:

create table dual (x int);
insert into table dual select count(*)+1 as x from dual;

Tester une expression:

select split('3,2,1','\\,') as my_new_array from dual;

Sortie:

["3","2","1"]
5
invoketheshell

Il existe une solution Nice working (bien, solution de contournement) disponible dans le lien, mais elle est lente, comme vous pouvez l’imaginer.

L'idée est de créer une table avec un champ factice, de créer un fichier texte dont le contenu est simplement 'X', de charger ce texte dans cette table. Alto.

CREATE TABLE dual (dummy STRING);

load data local inpath '/path/to/textfile/dual.txt' overwrite into table dual;

SELECT date_add('2008-12-31', 1) from dual;
5
ciuncan

Solution rapide:

Nous pouvons utiliser la table existante pour obtenir une double fonctionnalité en suivant la requête.

SELECT date_add('2008-12-31', 1) FROM <Any Existing Table> LIMIT 1

Par exemple:

SELECT CONCAT('kbdjj','56454') AS a, null AS b FROM tbl_name LIMIT 1

Résultat

"limite 1" dans la requête est utilisé pour éviter plusieurs occurrences de valeurs spécifiées (kbdjj56454, null).

2
Balaji

Hive prend en charge cette fonction maintenant et prend également en charge de nombreuses autres fonctions de dates.

Vous pouvez exécuter une requête comme ci-dessous dans Hive, ce qui ajoutera des jours à la date fournie en premier argument.

SELECT DATE_ADD('2019-03-01', 5);

Fonctions de date de ruche

0
Jainik