2015-02-24 6 views
0

Dans Teradata, je souhaite créer une table temporaire globale, puis faire référence à cette table globale dans d'autres requêtes. Je ne veux pas créer de table volatile car j'utilise Teradata via un autre frontal et que le serveur frontal doit savoir si la table temporaire existe, donc les tables volatiles ne sont pas une option car elle n'existe pas dans le dictionnaire de données.Teradata crée une table temporaire globale

Voici mon code pour créer la table temporaire hihihi.

create set global temporary table hihihi as 
(select 
* 
from 
db.a_permanent_table) 
with no data 
on commit preserve rows; 

select * from hihihi; 

Selon les recherches que je l'ai fait, je ne peux pas utiliser le

avec des données

option

pour les tables temporaires (par exemple. Voir ce link). Je dois donc utiliser les

Aucune donnée

option

. Je pense que cela dit aussi que lorsque je fais référence à cette table temporaire, les données vont "se matérialiser".

Cependant, lorsque je fais la sélection comme ci-dessous

select * from hihihi; 

rien est retourné? Qu'est-ce qui me manque dans ma compréhension des tableaux temporaires mondiaux?

+0

Je commente parce que je ne suis pas sûr de la réponse en main, mais avez-vous essayé d'écrire une commande "INSERT" après la création de la table? Peut-être que la table create ne définit que le schéma ... (INSERT INTO hihihi SEL * FROM db.a_permanent_table;) – ChrisCamp

Répondre

1

Une table temporaire globale n'est vraiment rien mais une définition d'une table. Lorsqu'un utilisateur accède à cette table, elle est matérialisée uniquement pour cet utilisateur. Si un autre utilisateur accède à la table, une autre instance, complètement séparée de l'autre, est matérialisée. Si votre première instruction accédant à la table temporaire est autre chose qu'un insert (comme votre select *), elle n'aura pas de lignes.

Faites défiler jusqu'à la section des exemples here, je pense que cela devrait aider.

+0

souhaite que la documentation soit meilleure je suppose. – xiaodai