IBM PureData System for Analytics, Version 7.1

CREATE TABLE AS

La commande CREATE TABLE AS permet de créer une table en fonction des résultats d'une instruction SELECT. Cette commande est parfois abrégée en CTAS.

La commande CREATE TABLE AS possède les caractéristiques suivantes :
Tâches usuelles
La commande CREATE TABLE AS permet de créer une table et de la remplir avec les données d'une commande select :
  • Les colonnes de table possèdent les noms et les types de données associés aux colonnes de sortie de la commande SELECT, à moins que vous ne remplaciez les noms de colonne en spécifiant une liste explicite de nouveaux noms de colonne.
  • La commande CREATE TABLE AS crée une table et évalue la requête une fois pour remplir initialement la nouvelle table. La nouvelle table ne recherche pas les modifications ultérieures apportées aux tables source de la requête. (Au lieu de cela, chaque fois que vous interrogez une vue, elle réévalue les commandes SELECT sous-jacentes.)
Suppression des statistiques automatiques sur les opérations CTAS de petite taille
Lors des opérations CTAS, IBM® Netezza exécute généralement GENERATE STATISTICS après l'opération CTAS pour collecter les statistiques sur la table créée. Toutefois, pour les requêtes de table plus courtes, l'exécution du processus GENERATE STATISTICS peut parfois prendre plus de temps que l'opération CTAS elle-même.

Lorsqu'une opération CTAS est soumise, les opérations de création et d'insertion de table sont effectuées. Lors de l'opération d'insertion, Netezza calcule les valeurs minimales, les valeurs maximales et les mappes de zones de toutes les colonnes. Si l'opération d'insertion génère un nombre de lignes inférieur au seuil configuré (ctas_auto_stats_min_rows), Netezza ignore l'opération de génération des statistiques.

Deux paramètres du fichier postgresql.conf contrôlent cette fonction :
  • enable_small_ctas_autostats active ou désactive la fonction pour supprimer les statistiques automatiques sur les tables de petite taille. Ce paramètre est activé par défaut.
  • ctas_autostats_min_rows spécifie le seuil pour une table de petite taille. Netezza ne calcule pas les statistiques des tables qui se trouvent sous ce seuil. La valeur par défaut est de 10000.
Gestion des clés de distribution
Si vous ne définissez pas de clés de distribution explicites, une table CTAS hérite de sa distribution de la table parent. En général, la distribution de la table cible est définie par le noeud final dans le plan. Si la distribution du noeud final n'est pas valide, le système affecte cette distribution à la cible CTAS. Le système n'utilise la première colonne de la table que si le noeud du plan final n'a pas de distribution (comme pour un noeud sur l'hôte).

La clé de distribution par défaut est la première colonne (distribution par hachage) dans laquelle il n'existe pas de clé de distribution discernable ou le flux source dans la table CTAS a une distribution par permutation circulaire.

La table t_one hérite de ses clés de distribution de f_one. (Elle n'utilise pas la première colonne par défaut.)
CREATE TABLE t_one AS SELECT … FROM tbl …;
La table t_two hérite de ses clés de distribution de la table de jointure de (tbl_one+tbl_two), qui correspondent à leurs clés de jointure.
CREATE TABLE t_two AS SELECT … FROM tbl_one,tbl_two … WHERE
tbl_one.b1 = tbl_two.b2 …
La table t_three hérite de ses clés de distribution du noeud de regroupement, à savoir (b1,b2,b3).
CREATE TABLE t_three AS SELECT … FROM tbl_one, tbl_two, tbl_three…
WHERE … GROUP BY b1,b2,b3;
Valeur par défaut du système pour les distributions de table
Le paramètre enable_random_table_distribute du fichier postgresql.conf contrôle le comportement de distribution par défaut lorsque des tables sont créées. La valeur par défaut 0 (désactivé) spécifie le comportement suivant, qui est le comportement par défaut pour les tables créées dans les versions précédentes :
  • Pour une opération CREATE TABLe :
    • Si DISTRIBUTE ON est spécifié, utilisez le mécanisme de distribution spécifié.
    • Si DISTRIBUTE ON n'est pas spécifié, utilisez la première colonne comme clé de distribution par défaut.
  • Pour une opération CREATE TABLE AS (CTAS) :
    • Si DISTRIBUTE ON est spécifié, utilisez le mécanisme de distribution spécifié.
    • Si DISTRIBUTE ON n'est pas spécifié, les clés de distribution sont héritées du plan. Si le planificateur ne parvient pas à déterminer une distribution à partir du plan, utilisez la première colonne comme clé par défaut.
Si vous spécifiez enable_random_table_distribute=1 (activé), le système change de comportement :
  • Pour une opération CREATE TABLe :
    • Si DISTRIBUTE ON est spécifié, utilisez le mécanisme de distribution spécifié.
    • Si DISTRIBUTE ON n'est pas spécifié, utilisez la méthode de distribution aléatoire.
  • Pour une opération CREATE TABLE AS (CTAS) :
    • Si DISTRIBUTE ON est spécifié, utilisez le mécanisme de distribution spécifié.
    • Si DISTRIBUTE ON n'est pas spécifié, les clés de distribution sont héritées du plan. Si le planificateur ne parvient pas à déterminer une distribution à partir du plan, utilisez la méthode de distribution aléatoire.
Dans certains cas, il se peut que le planificateur ne puisse pas déterminer une distribution à partir du plan. Par exemple :
  • En cas de jointure finale sur l'hôte, la distribution du résultat de cette jointure est non déterministe.
  • Si la colonne de distribution est manquante dans <select-list>, la distribution est non déterministe.
  • Si la distribution du noeud de résultat final est aléatoire, la distribution est considérée comme non déterministe.
  • Si la jointure finale est une jointure externe complète, la distribution est non déterministe.

Cette modification rend obsolète la variable d'environnement NZ_DISABLE_SKEW_DEFENSE, qui contrôlait ce comportement dans les versions antérieures. La mise à niveau vers la version 4.6 recherche la présence de la variable et, si elle est définie, utilise sa valeur pour affecter à enable_random_table_distribute sa valeur correspondante.

Pour modifier la variable postgresql.conf, procédez comme suit :
  1. Utilisez un éditeur standard pour ouvrir le fichier de configuration, nz/data/postgresql.conf.
  2. Recherchez la ligne contenant the enable_random_table_distribute = 0.
  3. Remplacez la valeur 0 de la variable par 1 et sauvegardez la modification.
  4. Redémarrez le système Netezza pour que les modifications soient appliquées.

Syntaxe

Syntaxe d'utilisation de la commande CREATE TABLE As :
CREATE [ TEMPORARY | TEMP ] TABLE <table> [ (<col>[,<col>…] ) ]
AS <clause_select> [ DISTRIBUTE ON ( <col_dist>[,<col_dist>…] ) ]

Entrées

La commande CREATE TABLE AS accepte les entrées suivantes :
Tableau 1. Entrées de la commande CREATE TABLE AS
Entrée Description
TEMPORARY ou TEMP Crée une table temporaire.
<table> Nom de la table à créer. Une table temporaire peut posséder le même nom qu'une table permanente qui existe déjà, mais les autres noms de table doivent être uniques dans la portée d'une base de données.
<col> Nom d'une colonne dans la nouvelle table. Si vous ne spécifiez pas de nom de colonne, un nom est extrait du nom de la colonne en sortie de la clause select.
<clause_select> Commande SELECT comme décrit dans SELECT (pour extraire des lignes).
<col_dist> Nom d'une colonne de distribution. Pour plus d'informations sur les colonnes de distribution, voir "Gestion des clés de distribution" dans la section Droits.

Sorties

Pour une liste des messages de sortie possibles, voir les commandes CREATE TABLE et SELECT.

Droits

Vous devez être administrateur, propriétaire de la base de données ou du schéma ou disposer des droits Create Table. Vous devez également disposer des droits Select pour la table que vous utilisez dans l'instruction SELECT.

Syntaxe

Voici un exemple de syntaxe :



Feedback | Copyright IBM Corporation 2014 | Last updated: 2014-02-28