IBM PureData System for Analytics, Version 7.1

CREATE TABLE AS

Mit dem CREATE TABLE AS-Befehl können Sie eine Tabelle erstellen, die auf den Ergebnissen einer SELECT-Anweisung basiert. Der Name dieses Befehls wird manchmal mit CTAS abgekürzt.

Der CREATE TABLE AS-Befehl hat die folgenden Merkmale:
Allgemeine Tasks
Mit dem CREATE TABLE AS-Befehl können Sie eine Tabelle erstellen und sie mit Daten aus einem SELECT-Befehl füllen:
  • Tabellenspalten haben die Namen und Datentypen, die den Ausgabespalten des SELECT-Befehls zugeordnet sind, es sei denn, Sie überschreiben die Spaltennamen, indem Sie eine explizite Liste mit neuen Spaltennamen bereitstellen.
  • Der CREATE TABLE AS-Befehl erstellt eine Tabelle und wertet die Abfrage ein Mal aus, um die neue Tabelle anfänglich zu füllen. Die neue Tabelle verfolgt nicht die nachfolgend an den Quellentabellen der Abfrage vorgenommenen Änderungen. (Im Gegensatz dazu werden jedes Mal, wenn Sie eine Ansicht abfragen, die zugrunde liegenden SELECT-Befehle erneut ausgewertet.)
Automatische Statistik bei kurzen CTAS-Befehlen unterdrücken
Bei CTAS-Operationen führt IBM® Netezza normalerweise GENERATE STATISTICS nach der CTAS-Operation aus, um Statistikdaten zur erstellten Tabelle zu erfassen. Bei kürzeren Tabellenabfragen jedoch kann der GENERATE STATISTICS-Prozess manchmal länger dauern als die CTAS-Operation selbst.

Wenn eine CTAS-Operation übergeben wird, finden Tabellenerstellungs- und Einfügeoperationen statt. Während der INSERT-Operation berechnet Netezza die Mindest- und Maximalwerte sowie die Zonenmaps für alle Spalten. Wenn die INSERT-Operation eine Zeilenanzahl ergibt, die kleiner als der konfigurierte Grenzwert (ctas_auto_stats_min_rows) ist, überspringt Netezza die GENERATE STATISTICS-Operation.

In der Datei postgresql.conf gibt es zwei Einstellungen, die dieses Feature steuern:
  • enable_small_ctas_autostats aktiviert oder inaktiviert das Feature für die Unterdrückung der automatischen Statistik für kleine Tabellen. Die Einstellung ist standardmäßig aktiviert.
  • ctas_autostats_min_rows gibt den Schwellenwert für eine kleine Tabelle an. Netezza berechnet keine Statistik für Tabellen, die unter diesem Schwellenwert liegen. Der Standardwert ist 10000.
Verteilungsschlüssel handhaben
Wenn Sie keine expliziten Verteilungsschlüssel definieren, übernimmt eine CTAS-Tabelle ihre Verteilung von der übergeordneten Tabelle. Im Allgemeinen wird die Verteilung der Zieltabelle vom letzten Knoten im Plan definiert. Wenn der letzte Knoten eine gültige Verteilung hat, weist das System die betreffende Verteilung dem CTAS-Ziel zu. Nur wenn der letzte Planknoten keine Verteilung aufweist (wie beispielsweise ein Knoten am Host), verwendet das System standardmäßig die erste Spalte der Tabelle.

Als Standardverteilungsschlüssel dient die erste Spalte (Hashverteilung), wenn kein erkennbarer Verteilungsschlüssel vorhanden ist oder der Quellendatenstrom in die CTAS-Tabelle eine Umlaufverteilung aufweist.

Tabelle t_one übernimmt ihre Verteilungsschlüssel aus f_one. (Es wird nicht standardmäßig die erste Spalte verwendet.)
CREATE TABLE t_one AS SELECT … FROM tbl …;
Tabelle t_two übernimmt ihre Verteilungsschlüssel aus der Jointabelle (tbl_one+tbl_two), bei denen es sich um deren Joinschlüssel handeln würde.
CREATE TABLE t_two AS SELECT … FROM tbl_one,tbl_two … WHERE
tbl_one.b1 = tbl_two.b2 …
Tabelle t_three übernimmt ihre Verteilungsschlüssel aus dem Gruppierungsknoten; es handelt sich dabei um (b1,b2,b3).
CREATE TABLE t_three AS SELECT … FROM tbl_one, tbl_two, tbl_three…
WHERE … GROUP BY b1,b2,b3;
Systemstandardwert für Tabellenverteilungen
Die postgresql.conf-Einstellung enable_random_table_distribute steuert das Standardverteilungsverhalten, wenn Tabellen erstellt werden. Der Standardwert 0 (inaktiviert) gibt das folgende Verhalten an, bei dem es sich um das Standardverhalten für Tabellen handelt, die in früheren Releases erstellt wurden.
  • Für eine CREATE TABLE-Operation:
    • Wird DISTRIBUTE ON angegeben, wird der angegebene Verteilungsmechanismus verwendet.
    • Wird DISTRIBUTE ON nicht angegeben, wird die erste Spalte als Standardverteilungsschlüssel verwendet.
  • Für eine CREATE TABLE AS-Operation (CTAS-Operation):
    • Wird DISTRIBUTE ON angegeben, wird der angegebene Verteilungsmechanismus verwendet.
    • Wird DISTRIBUTE ON nicht angegeben, werden die Verteilungsschlüssel aus dem Plan übernommen. Wenn der Planer keine Verteilung anhand des Plans ermitteln kann, wird die erste Spalte als Standardschlüssel verwendet.
Wenn Sie enable_random_table_distribute=1 (aktiviert) angeben, ändert sich das Systemverhalten wie folgt:
  • Für eine CREATE TABLE-Operation:
    • Wird DISTRIBUTE ON angegeben, wird der angegebene Verteilungsmechanismus verwendet.
    • Wird DISTRIBUTE ON nicht angegeben, wird die zufällige Verteilungsmethode (RANDOM) verwendet.
  • Für eine CREATE TABLE AS-Operation (CTAS-Operation):
    • Wird DISTRIBUTE ON angegeben, wird der angegebene Verteilungsmechanismus verwendet.
    • Wird DISTRIBUTE ON nicht angegeben, werden die Verteilungsschlüssel aus dem Plan übernommen. Wenn der Planer keine Verteilung anhand des Plans ermitteln kann, wird die zufällige Verteilungsmethode (RANDOM) verwendet.
In manchen Fällen ist der Planer möglicherweise nicht in der Lage, eine Verteilung anhand des Plans zu ermitteln. Beispiel:
  • Wenn ein letzter Join auf dem Host ausgeführt wird, dann kann die Verteilung des Ergebnisses des betreffenden Joins nicht ermittelt werden.
  • Wenn die Verteilungsspalte in der <Auswahlliste> fehlt, dann kann die Verteilung nicht ermittelt werden.
  • Wenn die Verteilung des letzten Ergebnisknotens zufällig ist, wird die Verteilung als nicht ermittelbar betrachtet.
  • Wenn der letzte Join ein vollständiger Outer Join ist, dann kann die Verteilung ebenfalls nicht ermittelt werden.

Diese Änderung führt dazu, dass die Umgebungsvariable NZ_DISABLE_SKEW_DEFENSE, die dieses Verhalten in früheren Releases gesteuert hat, veraltet ist. Das Upgrade auf Release 4.6 prüft auf das Vorliegen der Variablen und, falls sie festgelegt ist, verwendet es ihren Wert, um enable_random_table_distribute auf den entsprechenden Wert der Variablen zu setzen.

Gehen Sie wie folgt vor, um die postgresql.conf-Variable zu ändern:
  1. Öffnen Sie die Konfigurationsdatei nz/data/postgresql.conf mit einem Standardeditor.
  2. Suchen Sie die Zeile, die die Angabe enable_random_table_distribute = 0 enthält.
  3. Ändern Sie die Variable von 0 in 1 und speichern Sie die Änderung.
  4. Starten Sie das Netezza-System erneut, damit die Änderungen wirksam werden.

Syntax

Syntax für die Verwendung des CREATE TABLE AS-Befehls:
CREATE [ TEMPORARY | TEMP ] TABLE <Tabelle> [ (<Spalte>[,<Spalte>…] ) ]
AS <Auswahlklausel> [ DISTRIBUTE ON ( <Verteilungsspalte>[,<Verteilungsspalte>…] ) ]

Eingaben

Der CREATE TABLE AS-Befehl akzeptiert folgende Eingaben:
Tabelle 1. Eingaben für CREATE TABLE AS
Eingabe Beschreibung
TEMPORARY oder TEMP Temporäre Tabelle erstellen.
<Tabelle> Der Name der zu erstellenden Tabelle. Eine temporäre Tabelle kann denselben Namen haben wie eine bereits vorhandene permanente Tabelle, aber andere Tabellennamen müssen innerhalb des Geltungsbereichs der Datenbank eindeutig sein.
<Spalte> Der Name einer Spalte in der neuen Tabelle. Wenn Sie keinen Spaltennamen angeben, wird der Name der Ausgabespalte in der Auswahlklausel übernommen.
<Auswahl-
klausel>
Ein in SELECT (zum Abrufen von Zeilen) beschriebener SELECT-Befehl.
<Verteilungs-
spalte>
Der Name einer Verteilungsspalte. Weitere Informationen zu Verteilungsspalten finden Sie im Abschnitt zur Handhabung von Verteilungsschlüsseln in Berechtigungen.

Ausgaben

Eine Liste der möglichen Ausgabenachrichten finden Sie in den Erläuterungen zum CREATE TABLE- und SELECT-Befehl.

Berechtigungen

Sie müssen der Benutzer mit Administratorberechtigung oder der Eigner der Datenbank oder des Schemas sein oder Sie müssen über die Berechtigung zum Erstellen von Tabellen verfügen. Sie müssen außerdem Auswahlberechtigung für die Tabelle haben, die Sie in der SELECT-Anweisung verwenden.

Verwendung

Es folgt ein Verwendungsbeispiel.



Feedback | Copyright IBM Corporation 2014 | Letzte Aktualisierung: 2014-02-28