IBM PureData System for Analytics, Version 7.1

CREATE TABLE AS

Utilice el comando CREATE TABLE AS para crear una tabla basada de los resultados de una sentencia SELECT. El nombre de este comando a veces se abrevia como CTAS.

El comando CREATE TABLE AS tiene las siguientes características:
Tareas habituales
Utilice el comando CREATE TABLE AS para crear una tabla y llenarla con datos desde un comando select:
  • Las columnas de tabla tiene los nombres y tipos de datos asociados con las columnas de salida del comando SELECT, a menos que sustituya los nombres de columna dando una lista explícita de los nuevos nombres de columna.
  • El comando CREATE TABLE AS crea una tabla y evalúa la consulta una vez para rellenar la nueva tabla inicialmente. La tabla nueva no hace seguimiento de cambios posteriores para la tabla de origen de la consulta. (Por el contrario, cada vez que consulta una vista, reevalúa los comandos SELECT subyacentes.)
Suprima las estadísticas automáticas en CTAS pequeños
Durante las operaciones CTAS, IBM® Netezza normalmente ejecuta GENERATE STATISTICS siguiente la operación CTAS para recopilar estadísticas en la tabla creada. Sin embargo, para consultas de tabla más cortas, el proceso GENERATE STATISTICS algunas veces puede tardar más tiempo en ejecutarse que la operación CTAS misma.

Cuando se envía una operación CTAS, tienen ligar la creación de tabla y las operaciones de inserción. Durante la operación de inserción, Netezza calcula los valores mínimo y máximo y los mapas de zona para todas las columnas. Si la operación de inserción da un número de filas menor que el umbral configurado (ctas_auto_stats_min_rows), Netezza omite la operación generar estadísticas.

Hay dos valores de archivo postgresql.conf que controlan esta característica:
  • enable_small_ctas_autostats habilita o inhabilita la característica para suprimir las estadísticas automáticas en tablas pequeñas. Este valor está habilitado de forma predeterminada.
  • ctas_autostats_min_rows especifica el número de umbral para una tabla pequeña. Netezza no calcula estadísticas para las tablas que están por debajo de este umbral. El valor predeterminado es 10000.
Gestionar claves de distribución
Si no define claves de distribución explícitas, una tabla CTAS hereda su distribución de la tabla padre. En general, la distribución de la tabla de destino se define mediante el nodo final del plan. Si el nodo final tiene una distribución válida, el sistema asigna esa distribución al destino CTAS. Solo si el nodo del plan final no tiene distribución (como un nodo en el host) hace que el valor predeterminado del sistema sea la primera columna de la tabla

La clave de distribución predeterminada es la primera columna (distribución hash) donde no hay una clave de distribución discernible o la secuencia de origen de la tabla CTAS tiene una distribución en rueda.

La tabla t_one hereda sus claves de distribución ed f_one. (No tiene como valor predeterminado la primera columna.)
CREATE TABLE t_one AS SELECT … FROM tbl …;
La tabla t_two hereda sus claves de distribución de la tabla de unión de (tbl_one+tbl_two), que deberían ser sus claves de unión.
CREATE TABLE t_two AS SELECT … FROM tbl_one,tbl_two …
WHERE tbl_one.b1 = tbl_two.b2 …
La tabla t_three hereda sus claves de distribución del nodo de agrupación, que debería ser (b1,b2,b3).
CREATE TABLE t_three AS SELECT … FROM tbl_one, tbl_two, tbl_three…
WHERE … GROUP BY b1,b2,b3;
Valor predeterminado del sistema para las distribuciones de tabla
El valor postgresql.conf enable_random_table_distribute controla el comportamiento de distribución predeterminado cuando se crean las tablas. El valor predeterminado 0 (inhabilitado) especifica el siguiente comportamiento, que es el comportamiento predeterminado para tablas que se crearon en releases anteriores:
  • Para una operación CREATE TABLE:
    • Si se ha especificado DISTRIBUTE ON, utilice el mecanismo de distribución especificado.
    • Si no se ha especificado DISTRIBUTE ON, utilice la primera columna como clave de distribución predeterminada.
  • Para una operación CREATE TABLE AS (CTAS):
    • Si se ha especificado DISTRIBUTE ON, utilice el mecanismo de distribución especificado.
    • Si no se especifica DISTRIBUTE ON, herede las claves de distribución del plan. Si el planificador no puede determinar una distribución desde un plan, utilice la primera columna como clave predeterminada.
Si especifica enable_random_table_distribute=1 (habilitado), el comportamiento del sistema cambia a lo que vemos a continuación:
  • Para una operación CREATE TABLE:
    • Si se ha especificado DISTRIBUTE ON, utilice el mecanismo de distribución especificado.
    • Si no se ha especificado DISTRIBUTE ON, utilice aleatorio como método de distribución.
  • Para una operación CREATE TABLE AS (CTAS):
    • Si se ha especificado DISTRIBUTE ON, utilice el mecanismo de distribución especificado.
    • Si no se especifica DISTRIBUTE ON, herede las claves de distribución del plan. Si el planificador no puede determinar una distribución desde un plan, utilice aleatorio como método de distribución.
En algunos casos, el planificador no puede determinar una distribución desde un plan. Por ejemplo:
  • Si se produce una unión final en el host, la distribución del resultado de esa unión no es determinista.
  • Si falta la columna de distribución de <select-list>, la distribución no es determinista.
  • Si la distribución del nodo de resultado final es aleatorio, la distribución se considera no determinista.
  • Si la unión final es una unión externa completa, entonces la distribución no es determinista.

Este cambio hace que la variable de entorno NZ_DISABLE_SKEW_DEFENSE quede obsoleta, que controlaba este comportamiento en releases anteriores. La actualización al release 4.6 comprueba la presencia de la variable, y si está establecida, utiliza su valor para establecer enable_random_table_distribute a su valor correspondiente.

Para cambiar la variable postgresql.conf , realice lo siguiente:
  1. Utilice el editor estándar para abrir el archivo de configuración, nz/data/postgresql.conf.
  2. Encuentre la línea que contiene the enable_random_table_distribute = 0.
  3. Cambie la variable de 0 a 1 y guarde el cambio.
  4. Reinicie el sistema Netezza para que los cambios surtan efecto.

Sintaxis

Sintaxis para utilizar el comando CREATE TABLE AS:
CREATE [ TEMPORARY | TEMP ] TABLE <table> [ (<col>[,<col>…] ) ]
AS <select_clause> [ DISTRIBUTE ON ( <dist_col>[,<dist_col>…] ) ]

Entradas

El comando CREATE TABLE AS toma las siguientes entradas:
Tabla 1. Entradas de CREATE TABLE AS
Entrada Descripción
TEMPORARY o TEMP Cree una tabla temporal.
<table> Nombre de la tabla que se quiere crear. Una tabla temporal puede tener el mismo nombre que una tabla permanente que ya exista, pero otros nombres de tabla deben ser exclusivos dentro del ámbito de una base de datos.
<col> Nombre de una columna de la nueva tabla. Si no se proporciona ningún nombre de columna, se toma un nombre de la columna de salida de la cláusula select.
<select_clause> Mandato SELECT como se describe en SELECT (para recuperar filas).
<dist_col> Nombre de una columna de distribución. Para obtener más información sobre las columnas de distribución, consulte "Gestión de claves de distribución" en Privilegios.

Salidas

Consulte los comandos CREATE TABLE y SELECT para obtener un listado de los mensajes de salida posibles.

Privilegios

Debe ser el usuario administrativo, el propietario de la base de datos o esquema, o debe tener el privilegio Create Table. También es necesario contar con el privilegio Select para la tabla que se está utilizando en la sentencia SELECT.

Uso

A continuación, se proporciona un uso de muestra.



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