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?
Pas encore: https://issues.Apache.org/jira/browse/Hive-1558
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!
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"]
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;
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
"limite 1" dans la requête est utilisé pour éviter plusieurs occurrences de valeurs spécifiées (kbdjj56454, null).
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);