Gestión de datos con la biblioteca Netezza para R

Esta sección describe los tipos de datos de la biblioteca Netezza R y algunas funciones básicas que permiten la manipulación de datos.

nz.data.frame

La construcción más importante y frecuente es el objeto de la clase ' nz.data.frame. La función ' nz.data.frame() ' crea un puntero a una tabla en el sistema Netezza. This pointer can later be used to run data transformations with nzApply, or nzRun, or data mining algorithms. No almacena ningún dato en la memoria local, sino que proporciona metadatos que pueden utilizarse para determinar el subconjunto correcto de la tabla (columnas, o filas, o ambas) donde debe ejecutarse el código de usuario. Es la salida estándar de la mayoría de las funciones de manipulación de datos de la biblioteca R de Netezza.
nzConnect("user", "password", "TT4-R040", "mm")
# create a reference to the table
adult nzadult = nz.data.frame("adult")
#Show the reference
nzadult
#SELECT
#ID,AGE,WORKCLASS,FNLWGT,EDUCATION,EDUCATION_NUM,MARITAL_STATUS,OCCUPATION,RELA#T
IONSHIP,RACE,SEX,CAPITAL_GAIN,CAPITAL_LOSS,HOURS_PER_WEEK,INCOME FROM ADULT
La clase ' nz.data.frame ' implementa una serie de métodos para extraer un subconjunto de sus datos, recopilar metainformación similar a la de ' data.frame, y trabajar con algoritmos paralelos de procesamiento de datos. Netezza puede configurarse para trabajar con esquemas. Las tablas con esquemas pueden referenciarse del mismo modo, utilizando el nombre del esquema además del nombre de la tabla.
# create a reference to the table adult
nzadult = nz.data.frame("a.adult")

Actualmente no hay soporte para el acceso entre bases de datos.

Tanto los esquemas como las tablas pueden distinguir entre mayúsculas y minúsculas. En este caso, deben colocarse entre comillas dobles. A continuación se muestra un ejemplo para acceder a la tabla "Adultos" (distingue mayúsculas de minúsculas) en el esquema A (no distingue mayúsculas de minúsculas).
# create a reference to the table Adult
nzadult = nz.data.frame('A."Adult"')

En R, las columnas de las tablas de las bases de datos siempre distinguen entre mayúsculas y minúsculas. Los nombres de columna que no están definidos como sensibles a mayúsculas/minúsculas se transforman a mayúsculas/minúsculas por defecto.

[,], $ y dim

Se puede especificar un subconjunto de columnas, filas o ambas mediante el operador " [,] ".

Una limitación es que no se puede hacer referencia a las filas por sus números porque no existe una numeración continua de filas en el sistema Netezza. En su lugar, debe especificar condiciones basadas en valores, tales como
nzdf2 <- nzadult[nzadult$ID>20,]
El resultado de cada selección puede comprobarse parcialmente utilizando la función " dim() ", ya que en esta fase sólo se han transferido metadatos a R. Esta función devuelve el número de filas y columnas.
# there are 15 columns and 32561 rows in the "adult"
table dim(nzadult)
#[1] 32561 15
# selecting columns 5,6 and
7 t1 <- nzadult[,5:7]
#SELECT EDUCATION,EDUCATION_NUM,MARITAL_STATUS FROM ADULT
# t1 has only 3 columns
dim(t1)
#[1] 32561 3
# selecting columns by their
names (t2 <- nzadult$AGE)
#SELECT AGE FROM ADULT
# t2 has only 1
column dim(t2)
#[1] 32561 1
# selecting rows satisfying condition AGE>30 and EDUCATIONNUM=10
# from the subset of columns number 1,2,5,7 and 16
t3 <- nzadult[nzadult[,2]>30 & nzadult[,6] == 10,c(1,2,6,7,15)]
t3
#SELECT ID,AGE,EDUCATION_NUM,MARITAL_STATUS,INCOME FROM ADULT WHERE ( AGE >
#'30' ) AND ( EDUCATION_NUM = '10' )
# there are fewer rows and fewer columns than in the initial
table dim(t3)
#[1] 4226 5

cabeza, cola

To get a sample of the data, you can use the head() and tail() functions. Las funciones extraen los datos especificados desde el principio o el final del conjunto de datos.
head(t3,4)
# ID AGE EDUCATION_NUM MARITAL_STATUS INCOME
#1 28 54 10 Married-civ-spouse large
#2 56 43 10 Married-civ-spouse large
#3 92 37 10 Divorced small
#4 140 49 10 Married-civ-spouse large
tail(nzadult[,1:4])
# ID AGE WORKCLASS FNLWGT
#32556 32538 30 Private 345898
#32557 32542 41 Private 202822
#32558 32546 39 Local-gov 111499
#32559 32550 43 State-gov 255835
#32560 32554 32 Private 116138
#32561 32558 40 Private 154374

as.data.frame

Para ver el conjunto de datos completo, debe descargarse del sistema Netezza utilizando " as.data.frame. Dado que adulto es un gran conjunto de datos, en el siguiente ejemplo se utiliza en su lugar uno de los marcos de datos creados anteriormente,t3).
reg_df <- as.data.frame(t3)
head(reg_df)
# ID AGE EDUCATION_NUM MARITAL_STATUS INCOME
#1 28 54 10 Married-civ-spouse large
#2 56 43 10 Married-civ-spouse large
#3 92 37 10 Divorced small
#4 140 49 10 Married-civ-spouse large
#5 204 42 10 Never-married small
#6 264 59 10 Married-civ-spouse small
class(reg_df)
#[1] "data.frame"

as.nz.data.frame

Otra función útil para manipular datos es ' as.nz.data.frame. Crea un objeto ' nz.data.frame ' a partir de un objeto R diferente. A continuación, se crea una tabla del sistema Netezza, en la que se insertan los datos transmitidos. El objeto creado apunta a la tabla del sistema recién creada.

Este ejemplo muestra cómo se puede crear un objeto ' nz.data.frame ' a partir de otro objeto R, en este caso a partir de un iris ' data.frame.
data(iris)
if (nzExistTable("nziris")) nzDeleteTable("nziris")
d = as.nz.data.frame(iris, "nziris")
d
#SELECT Sepal_Length,Sepal_Width,Petal_Length,Petal_Width,Species FROM nziris
class(d)
#[1] "nz.data.frame"
#attr(,"package")
#[1] "nzr"
El conjunto de datos del iris se almacena ahora en una tabla del sistema Netezza ' NZIRIS. Si no se especifica el segundo argumento, el nombre de la tabla se genera aleatoriamente.

Detalles

Las firmas de función con argumentos por defecto son:
nz.data.frame(table1, case.sensitive = NULL)
as.data.frame(x1, row.names=NULL, optional=FALSE,
max.rows=NULL, order.by=TRUE, ...)
as.nz.data.frame(x2, table2 = NULL, distributeon = NULL, fast=TRUE)
Donde:
table1
Especifica el nombre de una tabla disponible en el sistema Netezza en la base de datos utilizada actualmente.
row.names
No se utiliza, se incluye por compatibilidad.
opcional
No se utiliza, se incluye por compatibilidad.
x1
Especifica el objeto que debe coaccionarse a ' data.frame.
max.rows
Opcional. Especifica el número máximo de filas que se transferirán al cliente.
order.by
Opcional. Indica si debe utilizarse la ordenación.
x2
Especifica el objeto que se coaccionará a nz.data.frame.
table2
Opcional. Especifica el nombre de la tabla; si no se proporciona, la función selecciona un nombre.
distribuir en
Opcional. Especifica el nombre de la columna; la distribución de datos en el sistema Netezza se basa en esta columna.
rápido
Opcional. si se establece en ' FALSE, al crear una tabla, se realizan inserciones múltiples. Esta opción requiere que los datos se almacenen localmente en un archivo temporal.