Download Importe y exporte datos de su Bluemix SQL

Document related concepts

Open Database Connectivity wikipedia , lookup

Toad wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

SQL:1999 wikipedia , lookup

Java Database Connectivity wikipedia , lookup

Transcript
Importe y exporte datos de su Bluemix SQL Database
con el servicio SQL Database
Paul Van Run ([email protected])
Senior Technical Staff Member
IBM
03-09-2014
Aprenda la forma de importar datos en Bluemix SQL Database. Vea una aplicación muestra
para mostrar la forma en la que se exportan los datos.
Regístrese para IBM Bluemix™
Esta plataforma de nube contiene servicios gratuitos, tiempos de ejecución e infraestructura
para ayudarlo a construir y desplegar rápidamente su siguiente aplicación móvil o de web.
Quizá ya jugó alrededor de la nueva plataforma IBM® Bluemix y notó que el servicio SQL
Database se enlistó con los otros servicios de bases de datos tales como IBM®Cloudant, MySQL,
MongoDB, y PostgreSQL. La base de datos SQL provee una base de datos relacional on-demand
para las cargas de trabajo transaccionales.
Este tutorial describe cómo construir y desplegar una pequeña aplicación Java™ que use el
servicio SQL Database. Aprenda cómo crear un tiempo de ejecución Java, vincular una instancia
de servicio SQL Database al mismo, subir una aplicación Java y acceder a la consola SQL
Database para crear algunas tablas y cargar ciertos datos. Dado que la consola no le permite
exportar una tabla completa, use la aplicación Java para exportar datos de una tabla Bluemix SQL
Database a la máquina del usuario.
“ El servicio SQL Database es una forma rápida y sencilla
de agregar una poderosa base de datos relacional a
su aplicación web o móvil. Bajo las cubiertas, usa la
tecnología IBM DB2. ”
La documentación Bluemix contiene toda una sección sobre cómo empezar a construir una
aplicación web. Explica todo sobre la forma de instalar la herramienta Bluemix cf para cómo subir
su aplicación. Gran parte de estos pasos se pueden realizar a través de la interfaz del usuario
Bluemix.
Corra la aplicación
© Copyright IBM Corporation 2014
Importe y exporte datos de su Bluemix SQL Database con el
servicio SQL Database
Marcas
Pagina 1 de 11
developerWorks®
ibm.com/developerWorks/ssa/
Obtenga el código
Nota: Esta aplicación muestra permite que los usuarios exporten cualquiera de sus tablas y
como tal provee a los usuarios de web el acceso a todos los datos SQLDB. En un ambiente del
mundo real necesitará asegurar la aplicación con autenticación para asegurar que únicamente
ciertos usuarios tengan acceso. Además, podría necesitar limitar el acceso a diferentes conjuntos
de tablas a distintos grupos de usuarios a través de cierto conjunto de reglas de autorización.
Consulte la documentación Bluemix para determinar la forma de agregar una autenticación a una
aplicación.
Construya una aplicación Java simple
Para construir una aplicación Bluemix simple, realice estos pasos:
• Cree un tiempo de ejecución para su aplicación. El tiempo de ejecución puede ser Java,
Node.js, Ruby Sinatra Ruby Rails, o un tiempo de ejecución build-pack personalizado.
• Cree y vincule los servicios apropiados a la aplicación. En este caso, vincule el servicio SQL
Database a la aplicación.
• Codifique y construya o compile su aplicación localmente en su estación de trabajo y
después descárguela a Bluemix usando la herramienta de la línea de comando cf push.
Elija entre varias herramientas y métodos para desarrollar código usando Bluemix.
• Use la herramienta cf desde la línea de comando para hacer casi cualquier cosa.
• Use la interfaz del usuario Bluemix para crear y vincular los tiempos de ejecución y los
servicios.
• Use Eclipse para crear su código y usar el plugin Eclipse Bluemix para enviarlo directamente
a Bluemix. También puede usar su editor favorito o IDE.
• Use IBM DevOps Services, un lugar en línea donde puede colaborar para desarrollar,
rastrear, planear y desplegar directamente a Bluemix
Les mostraré una forma de hacer las cosas pero hay muchas alternativas para adaptarse a sus
necesidades y preferencias.
Cree el tiempo de ejecución
En la interfaz del usuario Bluemix vaya a su tablero y haga clic en + CREATE AN APP.
Seleccione el tiempo de ejecución Liberty for Java del catálogo. Dé un nombre a su aplicación.
Este nombre necesita ser único a través de todo Bluemix porque se vuelve parte del URL de su
aplicación. Haga clic en CREATE. En el tablero, se ve algo similar a la siguiente figura:
Importe y exporte datos de su Bluemix SQL Database con el
servicio SQL Database
Pagina 2 de 11
ibm.com/developerWorks/ssa/
developerWorks®
Nota: El ícono podría ser diferente al que se muestra aquí.
Vincule una instancia de servicio SQL Database
Para poder ver la visión general del tiempo de ejecución de la aplicación, haga clic en la
aplicación. En esta vista, haga clic en + ADD A SERVICE. Se abre una vista del catálogo Bluemix.
Seleccione el servicio SQL Database bajo la sección Data Management.
En la ventana subsecuente, encuentre esa descripción del servicio y los planes disponibles.
Seleccione el plan Pequeño. En el lado derecho de la ventana, asegúrese de que la aplicación
que se menciona es al que usted vincula este servicio. Después puede cambiar el nombre
de la instancia del servicio SQL Database (cuál es el nombre de su base de datos), o deje el
predeterminado y haga clic en CREATE. Si se le pide reiniciar la aplicación en este momento,
haga clic en OK.
En este punto, Bluemix hace dos pasos para usted. Procura una instancia de una base de datos
DB2®para usted, disponible como una instancia del servicio SQL Database. Posteriormente
vincula esta base de datos al tiempo de ejecución de la aplicación. Este paso vinculante
básicamente permite que el tiempo de ejecución use la base de datos.
La ventana de Visión General de su aplicación deberá ahora lucir similar a esta imagen:
Importe y exporte datos de su Bluemix SQL Database con el
servicio SQL Database
Pagina 3 de 11
developerWorks®
ibm.com/developerWorks/ssa/
Examine la estructura VCAP_SERVICES
Importante: El nombre del usuario y la clave de acceso que forma parte de la estructura
VCAP_SERVICES cambia cada vez que se vincule el servicio a una aplicación.
Haga clic en Runtime en el menú a la izquierda y despliegue a la parte inferior donde puede ver
la información VCAP_SERVICES. VCAP_SERVICES es un ambiente variable, disponible a su aplicación,
que contiene toda la información requerida para acceder a la base de datos. En un paso posterior
cuando se llegue al código Java, usted establece esta información para establecer una conexión
de base de datos.
{ "sqldb": [ { "name": "SQL Database-pvr", "label": "sqldb", "plan": "sqldb_small", "credentials":
{ "port": 50000, "db": "I_847692", "username": "jdfiwncbg", "host": "23.246.228.235", "hostname":
"23.246.228.235", "jdbcurl": "jdbc:db2://23.246.228.235:50000/I_847692", "uri": "db2://
jdfiwncbg:[email protected]:50000/I_847692", "password": "snfraomfrsbtp" } } ] }
Use la consola SQL Database
Haga clic en el cuadro SQL Database para ir a la consola de la pantalla de inicio Managed
Database. Para abrir la consola SQL Database, haga clic en LAUNCH.
El servicio administrado de base de datos, SQL Database, simplifica mucho la creación y
administración de una base de datos relacional completa. Se pueden realizar varias tareas
Importe y exporte datos de su Bluemix SQL Database con el
servicio SQL Database
Pagina 4 de 11
ibm.com/developerWorks/ssa/
developerWorks®
típicas de la base de datos, tales como correr declaraciones SQL, crear respaldos, cargar datos y
monitorear el uso a través de la consola. Pruebe unos cuantos de estos en los próximos pasos.
Corra el DDL
Haga clic en Work with Database Objects en la página Getting started o seleccione esta opción
del menú Managepara abrir el visualizador de datos. En la parte superior izquierda, vea el cuadro
desplegable hacia abajo con el nombre de su base de datos y su nombre DB2 interno con el
formato de I_123456. Si es propietario de sus instancias múltiples de SQL Database, ellas están
accesibles aquí.
Use el visualizador de datos para navegar en los contenidos de su base de datos. Dado que
acaba de crear esta base de datos, esta está actualmente vacía, excepto por las tablas del
catálogo DB2 que usted ve en el visualizador en esquemas tales como SYSCAT y SYSIBM. En
ocasiones, las opciones en el menú de la derecha están en gris. Para acceder a ellas primero
tiene que seleccionar una partida en la tabla de la izquierda. Por ejemplo, haga clic en el esquema
SYSIBM para ver las tablas en este esquema. Cuando seleccione una de las varias opciones del
menú de la tabla tales como Sample Data, Column Masks está disponible.
La siguiente imagen muestra el visualizador de datos después de seleccionar el esquema SYSIBM
y la tabla SYSTABLES. Después de que seleccione esas partidas, haga clic en la partida del menú
Columns a la izquierda para ver las columnas.
Haga clic en Run DDL en la parte inferior del menú a la izquierda. (La partida del menú RUN DDL
está por debajo de la sección que está visible en la captura previa de pantalla.)
Haga clic en Browse para descargar el archivo employee.sql de la muestra. (Obtenga el código
completo para esta muestra dando clic en Get the code al principio de este tutorial.) Este archivo
contiene una tabla simple de EMPLOYEE de la base de datos muestra de DB2. El DDL que se
muestra en la ventana de edición deberá verse similar al siguiente listado de código.
Importe y exporte datos de su Bluemix SQL Database con el
servicio SQL Database
Pagina 5 de 11
developerWorks®
ibm.com/developerWorks/ssa/
Mejores prácticas: Al crear o acceder a tablas en Bluemix SQL Database, use nombres de
esquema explícitos. Este enfoque evita que las tablas usen el predeterminado para adoptar el
nombre del usuario como el esquema.
CREATE TABLE USER01."EMPLOYEE" ( "EMPNO" CHAR(6) NOT
CHAR(1), "LASTNAME" VARCHAR(15) NOT NULL, "WORKDEPT"
CHAR(8), "EDLEVEL" SMALLINT NOT NULL, "SEX" CHAR(1),
DECIMAL(9 , 2), "COMM" DECIMAL(9 , 2) ); ALTER TABLE
KEY ("EMPNO");
NULL, "FIRSTNME" VARCHAR(12) NOT NULL, "MIDINIT"
CHAR(3), "PHONENO" CHAR(4), "HIREDATE" DATE, "JOB"
"BIRTHDATE" DATE, "SALARY" DECIMAL(9 , 2), "BONUS"
USER01."EMPLOYEE" ADD CONSTRAINT "PK_EMPLOYEE" PRIMARY
Haga clic en Run DDL para correr este guión y crear la tabla EMPLOYEE en el esquema USER01 en
su base de datos. Deberá obtener el mensaje The DDL ran successfully .
Importe los datos
Para cargar los datos en esta tabla, haga clic en Manage en el menú del nivel superior y
seleccione Load Data.
Paso 1. Suba el archivo.
• Haga clic en Browse files para seleccionar el archivo de datos employee.csv de su sistema
local.
• La fila 1 de este archivo no contiene los nombres de la columna; por lo tanto, haga clic en No
para responder la pregunta.
• Coloque el caracter del separador en Comma porque este es el caracter utilizado para
distinguir los valores de la columna en el archivo.
• Este archivo de carga contiene un número de fechas; por lo tanto, haga clic en Yes a la
pregunta Does the file have columns that contain dates or times? (¿El archivo contiene
fechas u horas?) y después introduzca YYYYMMDD como el formato de fechas. Si este patrón
no está en la lista desplegable, puede agregarlo usted mismo.
• Haga clic en Load File.
Importe y exporte datos de su Bluemix SQL Database con el
servicio SQL Database
Pagina 6 de 11
ibm.com/developerWorks/ssa/
developerWorks®
La consola ahora carga el archivo y le muestra una vista previa. El tamaño máximo del archivo es
de 20MB.
Paso 2. Elija un objetivo
• Seleccione Load into an existing table para cargar los datos a la tabla que creó en la
sección previa.
• Haga clic en Next.
Paso 3. Seleccione una tabla
• Haga clic en el esquema USER01 y clic en la tabla EMPLOYEE para seleccionar la tabla a la que
cargará los datos. Usted ve una lista de la vista previa de las columnas de la tabla.
• Seleccione Append new data into the table en la parte inferior del cuadro de diálogo.
Esta opción agrega los datos a la tabla. La otra opción borra la tabla y la reemplaza con el
contenido del archivo.
• Haga clic en Finish.
Paso 4. Cargue los datos a la tabla
Ahora deberá ver un mensaje en el que se establezca que la carga tuvo éxito y que muestra un
resumen de cuántos registros se cargaron.
Escriba una aplicación Bluemix Java para exportar los datos
El siguiente paso es construir una aplicación Java para exportar los contenidos de una tabla
de base de datos a un archivo que puede descargarse. (Obtenga el código completo para esta
Importe y exporte datos de su Bluemix SQL Database con el
servicio SQL Database
Pagina 7 de 11
developerWorks®
ibm.com/developerWorks/ssa/
muestra dando clic en Get the code al principio de este tutorial). La aplicación despliega una lista
de las tablas que se muestran en la base de datos. La lista ignora cualesquiera tablas del sistema
DB2. El usuario puede seleccionar una de estas tablas.
La aplicación escribe los registros de la tabla a un archivo en el servidor en formato CSV. El
archivo lo puede descargar el usuario.
Conéctese a Bluemix SQL Database
La clase SQLDBConnection en el paquete com.ibm.sqldb.util contiene la lógica para conectar SQL
Database en tres diferentes formas: desde la información en el contexto servlet, a la información
en VCAP_SERVICES variable, o mediante la información de la conexión suministrada explícitamente .
Este artículo usa la información de la variable VCAP_SERVICES aquí. El constructor de la clase toma
el valor de serviceName, en este caso sqldb, como un parámetro. La clase contiene variables de
instancia privada con setters y getters (establecimiento y obtención) para todos los elementos de
información de la conexión.
public SQLDBConnection(final String serviceName) throws SQLDBConnectionException
Parar obtener la variable de ambiente, se usa el método System.getenv:
vcapServices = System.getenv("VCAP_SERVICES");
La variable del ambiente VCAP_Services contiene una estructura JSON (como se mostró
anteriormente en este artículo) que se analizaron con la clase BasicDBObject del paquete
com.ibm.nosql.json.api proporcionado en el archivo nosqljon.jar con la muestra. La estructura
VCAP_SERVICES puede contener potencialmente servicios múltiples porque se puede ligar más de
un servicio a una aplicación. El código atraviesa la estructura buscando un servicio que contiene
sqldb.
BasicDBObject obj = (BasicDBObject) JSON.parse(vcapServices); // get all the keys from the JSON
structure Set<String> keys = obj.keySet(); // Look for the VCAP key that holds the serviceName
information for (String eachkey : keys) { // iterate and look for the key, stop on the first match if
(eachkey.toUpperCase().contains(serviceName.toUpperCase())) { setVCAPKey(eachkey); break; } }
Si se encuentra dicha llave, se puede analizar para extraer la información requerida de la
conexión de la base de datos, tal como el nombre del host y el número del puerto, el nombre de la
base de datos y el nombre y clave de acceso del usuario.
Importe y exporte datos de su Bluemix SQL Database con el
servicio SQL Database
Pagina 8 de 11
ibm.com/developerWorks/ssa/
developerWorks®
BasicDBList list = (BasicDBList) obj.get(getVCAPKey()); obj = (BasicDBObject) list.get("0"); //
if values are not found they'll be set to null setName((String) obj.get(Constants.NAME));
setLabel((String) obj.get(Constants.LABEL)); setPlan((String) obj.get(Constants.PLAN)); obj =
(BasicDBObject) obj.get(Constants.CREDENTIALS); setHostName((String) obj.get(Constants.HOSTNAME));
setHost((String) obj.get(Constants.HOST)); setPort((int) obj.get(Constants.PORT)); setUsername((String)
obj.get(Constants.USERNAME)); setPassword((String) obj.get(Constants.PASSWORD)); setDatabaseName((String)
obj.get(Constants.DBNAME));
Pueden usarse estas configuraciones de conexión para establecer una conexión a la instancia de
servicio SQL Database que se ligó a la aplicación como sigue:
DB2SimpleDataSource dataSource = new DB2SimpleDataSource(); if (getHost() != "" )
{ dataSource.setServerName(getHost()); } else { dataSource.setServerName(getHostName()); }
dataSource.setPortNumber(getPort()); dataSource.setDatabaseName(getDatabaseName());
dataSource.setUser(getUsername()); dataSource.setPassword(getPassword()); dataSource.setDriverType(4); con =
dataSource.getConnection(); con.setAutoCommit(autoCommit);
Datos de exportación
El volumen del procesamiento de exportaciones de CSV se realiza en el método de exportación
de la clase ExportTable. Se construye el hilo para la declaración SELECT y se corre la declaración.
Si se requiere la inclusión de un encabezado en el archivo CSV, se usa el conjunto de
resultados de meta datos establecidos para construir una lista de los nombres de columna.
Subsecuentemente, se procesa el conjunto de resultados y todos los valores de las filas se
escriben en el archivo de la salida.
public int export (String projection) throws SQLException, FileNotFoundException { writer = new
PrintWriter(this.filename); if (projection == "") projection = "*"; String execStatement = "SELECT " +
projection + " FROM " + this.tablename; Statement stmt = con.createStatement(); stmt.execute(execStatement);
ResultSet rs = stmt.getResultSet(); // iterate through the meta data set, display column headings
ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); if (header) { String
columnHeading = rsmd.getColumnName(1); for (int i = 2; i <= columnCount; i++) { columnHeading =
columnHeading + separator + rsmd.getColumnName(i); } writer.println(columnHeading); } // iterate through the
result set int count = 0; String row = ""; while (rs.next()) { count++; row = rs.getString(1); // iterate
through the columns for (int i = 2; i <= columnCount; i++) { int type = rsmd.getColumnType(i); if (type
== Types.VARCHAR || type == Types.CHAR) row = row + separator + quotation + rs.getString(i) + quotation;
else row = row + separator + rs.getString(i); } writer.println(row); } // Close the ResultSet rs.close();
writer.close(); return count; }
Cuando el procesamiento de la tabla esté completo y se escriba el archivo al sistema de archivos
se le presenta un vínculo al usuario para que pueda descargarse el archivo.
Importe y exporte datos de su Bluemix SQL Database con el
servicio SQL Database
Pagina 9 de 11
developerWorks®
ibm.com/developerWorks/ssa/
Conclusión
En virtud de la naturaleza administrada de SQL Database en Bluemix, un usuario no tiene acceso
a la interfaz de la línea de comando DB2 para realizar comandos Load/Unload o Import/Export.
En lugar de ello, necesita accederse a la consola para realizar este tipo de operaciones. Este
artículo muestra la forma de importar datos al servicio Bluemix SQL Database a través de la
aplicación de la consola. Le da los pasos para construir una aplicación Bluemix Java muestra para
exportar los datos de su tabla a su estación de trabajo.
Temas relacionados:
SQLDB
Bluemix
Importe y exporte datos de su Bluemix SQL Database con el
servicio SQL Database
Cloudant
Pagina 10 de 11
ibm.com/developerWorks/ssa/
developerWorks®
Sobre el autor
Paul Van Run
Information Management Cloud Services
© Copyright IBM Corporation 2014
(www.ibm.com/legal/copytrade.shtml)
Marcas
(www.ibm.com/developerworks/ssa/ibm/trademarks/)
Importe y exporte datos de su Bluemix SQL Database con el
servicio SQL Database
Pagina 11 de 11