domingo, 8 de mayo de 2022

SELECT / FROM en SQL

SELECT / FROM

Las palabras reservadas SELECT y FROM sirven para acceder los datos de una tabla de la forma mas básica.

Sintáxis

La sintáxis es la siguiente:

SELECT * 
FROM una_tabla;
  • Donde "*" representa todos los atributos o campos de la tabla.
  • Después de la palabra FROM sigue el nombre de la entidad o tabla a consultar.

Ejemplos

SELECT * 
FROM orden_de_compra;

SELECT * 
FROM usuario;

Ventajas

  • Esta forma es muy útil cuando se desconocen los nombres de los campos o atributos.

  • Permite visualizar todos los datos contenidos en la tabla.

Desventajas

  • En tablas con muchos registros y o columnas; la consulta puede ser muy lenta y costosa.

  • No es buena práctica usar esta sintáxis en sistemas productivos, por que algún cambio en la definición de la tabla puede romper la ejecución del código.

Pro tip

Usar LIMIT N para restringir el conjunto de datos a consultar

SELECT * 
FROM facturas 
LIMIT 10;

Solo consultamos los primeros 10 registros de las facturas.

martes, 19 de septiembre de 2017

Web scrapping con R y Postgresql

El paquete rvest de R que permite hacer web scrapping (acceder al DOM de una página web) y leer los datos que ésta contiene; para utilizarlos según se requiera.
El web scrapping es útil para extraer datos que se actualizan en la red en diferentes sitios, algunos ejemplos son: tipo de cambio, el clima, semana ISO actual, datos financieros, etc.
En este caso descargaré los datos de códigos de paises ISO (ISO Country codes) de la página w3schools.com y los guardaré en una tabla de Postgresql
Este es un extracto de los códigos:
Un punto clave del scrapping es identificar los elementos de las páginas, en este caso hay que buscar la tabla que contiene los códigos de los paises. Al ver código fuente de la página:
Se identifica el siguiente elemento TABLE:
<table class="w3-table-all notranslate">
Para extraer los datos usando el paquete rvest es necesario tener el url de la página y los elementos DOM de los cuales leer los datos. A continuación está el código R para guardar los datos en un Dataframe.
library("rvest")

url = 'https://www.w3schools.com/tags/ref_country_codes.asp'
countries = html(url, enconding = "UTF-8")

countriesDF = countries %>%
html_nodes("table") %>%
.[[1]] %>%
html_table()

La función html_nodes() extrae todas las tablas contenidas en el documento. En el ejemplo solo hay una y por eso se accede mediante .[[1]]
La función html_table() convierte la tabla a un dataframe de R.
El script para crear la tabla en Postgresql:
CREATE TABLE country(
    country_id CHAR(2) NOT NULL PRIMARY KEY,
    country VARCHAR(200) NOT NULL UNIQUE    
);
Finalmente usé los paquetes dplyr, para renombrar las columnas y filtrar los que no tienen código, y RPostgreSQL para guardar los códigos ISO y paises en la tabla country:
library("dplyr")
library("RPostgreSQL")

drv = dbDriver("PostgreSQL")
con = dbConnect(
    drv, dbname = "tuBaseDeDatos",
    host = "tuHostOIP", port = 5432,
    user = "tuUsuario", password = "tuPassword")
    
dbWriteTable(
    con, "country", 
    value = select(countriesDF, country_id = "ISO Code", country = Country) %>%
        filter(!is.na(country_id)), 
    append = TRUE, row.names = FALSE)
 
 dbDisconnect(con)
El script completo en R:
# Se usa para web scraping
library("rvest")
# Se usa para renombrar y filtrar datos
library("dplyr")
# Guarda en base de datos
library("RPostgreSQL")


# Web scrapping

url = 'https://www.w3schools.com/tags/ref_country_codes.asp'
countries = html(url, enconding = "UTF-8")

countriesDF = countries %>%
html_nodes("table") %>%
.[[1]] %>%
html_table()


# Guardado a BD

drv = dbDriver("PostgreSQL")
con = dbConnect(
    drv, dbname = "tuBD",
    host = "tuHostOIP", port = 5432,
    user = "tuUsuario", password = "tuPassword")
    
dbWriteTable(
    con, "country", 
    value = select(countriesDF, country_id = "ISO Code", country = Country) %>%
        filter(!is.na(country_id)), 
    append = TRUE, row.names = FALSE)
 
dbDisconnect(con)

martes, 2 de diciembre de 2014

Administrar Couchbase buckets con curl y Api Rest

Hola, hoy expondré como administrar los buckets (bases de datos) de Couchbase a través de la API Rest y curl.

En los siguientes comandos deberán sustituir los términos listados a continuación:


[ipOHost] por la dirección IP o nombre de su servidor Couchbase, en los ejemplos usaré: 127.0.0.1.
[administrador] por el nombre del usuario administrador del servidor Couchbase, en los ejemplos usaré: elTodoPoderoso.
[contraseña] por la contraseña del usuario administrador, en los ejemplos usaré: miPasswordSeguro.
[bucket] por el bucket a consultar, administrar o crear, en los ejemplos usaré: misDocumentos.
[contraseñaDeAcceso] por la contraseña de lectura del bucket, en los ejemplos usaré: miContraseñaDeAcceso.

Comandos:

  1. Ver información de todos los buckets.

    Comando:
    curl -u [administrador]:[contraseña] http://[ipOHost]:8091/pools/default/buckets -v

    Ejemplo:
    curl -u elTodoPoderoso:miPasswordSeguro http://127.0.0.1:8091/pools/default/buckets -v

    Nota: En los comandos de CURL use la opción -v para ver a mejor detalle la respuesta de los comandos, también puede servir para ver posibles errores. Se puede omitir el parámetro -v.

  2. Ver información de un solo bucket.

    Comando:
    curl -u [administrador]:[contraseña] http://[ipOHost]:8091/pools/default/buckets/[bucket] -v

    Ejemplo:
    curl -u elTodoPoderoso:miPasswordSeguro http://127.0.0.1:8091/pools/default/buckets/misDocumentos -v

  3. Ver estadísticas de un bucket.

    Comando:
    curl -u [administrador]:[contraseña] http://[ipOHost]:8091/pools/default/buckets/[bucket]/stats -v

    Ejemplo:
    curl -u elTodoPoderoso:miPasswordSeguro http://127.0.0.1:8091/pools/default/buckets/misDocumentos/stats -v

  4. Borrar datos de un bucket.

    Comando:
    curl -X POST 'http://[administrador]:[contraseña]@[ipOHost]:8091/pools/default/buckets/[bucket]/controller/doFlush' -v

    Ejemplo:
    curl -X POST 'http://elTodoPoderoso:miPasswordSeguro@127.0.0.1:8091/pools/default/buckets/misDocumentos/controller/doFlush' -v

    Notas:
    1. El bucket debió crearse como flushEnabled, solo recomiendo hacer esto para buckets de desarrollo o temporales
    2. Hay que cuidar el uso de este comando, ya que no requiere confirmación y es responsabilidad del administrador o aplicación confirmar el borrado.

  5. Borrar un Bucket

    Comando:
    curl -X DELETE 'http://[administrador]:[contraseña]@[ipOHost]:8091/pools/default/buckets/[bucket]' -v

    Ejemplo:
    curl -X DELETE 'http://elTodoPoderoso:miPasswordSeguro@127.0.0.1:8091/pools/default/buckets/misDocumentos' -v


    NOTA IMPORTANTE: Este comando desaparece por completo el bucket, es responsabilidad del administrador o aplicación confirmar el borrado, de preferencia no lo usen.

  6. Crear un bucket.

    Comando:
    curl -X POST -u [administrador]:[contraseña] -d name=[bucket] -d bucketType=couchbase -d authType=sasl -d  saslPassword=[contraseñaDeAcceso] -d ramQuotaMB=1024 -d proxyPort=0 -d flushEnabled=1 http://[ipOHost]:8091/pools/default/buckets

    Ejemplo:
    curl -X POST -u elTodoPoderoso:miPasswordSeguro -d name=misDocumentos -d bucketType=couchbase -d authType=sasl -d  saslPassword=miContraseñaDeAcceso -d ramQuotaMB=1024 -d proxyPort=0 -d flushEnabled=1 http://127.0.0.1:8091/pools/default/buckets


    Nota: Este comando habilita el borrado, si el bucket a crear es productivo, es recomendable establecer el parámetro flushEnabled=0 u omitirlo del comando.

Espero que estos comandos les permitan seguir relajándose en sus desarrollos y administración de Couchbase.

viernes, 5 de septiembre de 2014

Boilerplate

Hola, hoy hablaré de Boilerplate.

Este es un template para front-end muy popular que abarca cosas básicas requeridas para el desarrollo de sitios web en HTML5.

Sirve para tener los elementos básicos homologados en HTML5 y CSS3 y para manejar la diferencias entre navegadores de una manera general.

Boilerplate puede ser descargado aquí.

Boilerplate incluye otras librerías y frameworks como son: Normalize.css, Jquery, Modernizr.

domingo, 31 de agosto de 2014

Tips en Internacionalización

Hola, hoy listaré unos tips en internacionalización, es decir, que su sitio web o sistema sea compatible en múltiples idiomas y/o paises.

Este es un listado del World Wide Web Consortium que pueden consultar a fondo aquí: Internationalization Quicktips.

    Los tips:
  1. Usar Unicode donde sea posible para el contenido, bases de datos, etc. Siempre se debe declarar la codificación del contenido
  2. Usar caracteres en vez de escapes (por ejemplo: &#xE1; &#225; o &aacute;) siempre que se pueda.
  3. Declarar el lenguaje de los documentos e indicar los cambios de lemguaje internos.
  4. Usar hojas de estilo para información presentacional. Restringir el markup a la semántica.
  5. Verificar la posibilidad de traducción e interpretaciones culturales inapropiadas en imágenes, animaciones y ejemplos.
  6. Usar la codificación apropiada en las formas y servidos. Soportar formatos locales de nombres/direcciones, horas/fechas, etc.
  7. Usar texto simple y conciso. Tener cuidado al crear oraciones de múltiples cadenas.
  8. En cada página incluir claramente navegación visible a páginas o sitios locales, usando el lenguaje objetivo.
  9. Para XHTML, agregar
    dir="rtl"
    a la etiqueta html para texto que se lee de derecha a izquierda. Solamente se debe reutilizar para cambiar la dirección base.
  10. ¡Validar!

martes, 20 de mayo de 2014

Atachar y recrear log de Sql Server

En esta ocasión hablaré de cómo atachar una base de datos de Sql Server.

El atachar una base de datos sirve para restaurar una base de datos a partir del archivo primario y/o archivos secundarios.

Generalmente se presenta esta situación cuando no se tiene espeacio en disco duro para hacer un respaldo y restaurar la base en otra de respaldo. También sirve para generar logs de datos más pequeños o para recuperarse en caso de que el sistema operativo o servidor queden fuera de servicio y no se cuenta con un respaldo de la base de datos.

Es recomendable que se instalen las bases de datos en unidades físicas de disco duro distintas de donde está instalado el disco duro.

CREATE DATABASE baseDeDatos 
    ON (FILE='d:\rutaDeArchivoPrimario.mdf')
    FOR ATTACH_REBUILD_LOG

lunes, 14 de abril de 2014

Respaldo comprimido en Sql Server

El siguiente script les permitirá hacer un respaldo desde Sql Server Management Studio con compresión y verificación de integridad.
Para llenar en automático los campos ejecuten el atajo "Ctrl + M".
Les aparecera una ventana que solicita el nombre de la base de datos, la fecha del respaldo y una descripción del mismo.
Pueden cambiar la ruta en donde queda guardado el respaldo.
La compresión en los respaldos se puede aplicar en Sql Server 2008 y 2012.
El radio de compresión es casi de 5 a 1, es decir que una base de 5GB se quedará respaldada en aproximadamente 1 GB.

USE [master];

BACKUP DATABASE <baseDeDatos, VARCHAR(100),>
TO DISK = 'D:\SQL Server 2008\Backup\<baseDeDatos, VARCHAR(100),>_<fecha,VARCHAR(8),>.bak'
WITH 
 COMPRESSION, 
 CHECKSUM,
 NAME = '<baseDeDatos, VARCHAR(100),> - <descripcion, VARCHAR(100),>';

domingo, 9 de febrero de 2014

Leer las bases de datos MongoDB desde Java / Read MongoDB databases from Java

Hola, a continuación les muestro como leer los nombres de las bases de datos de MongoDB desde Java 1.7, usando el conector versión mongo-java-driver-2.9.3.jar.

Hello, next I will show you how to read the MongoDB database names from Java 1.7, using connector version mongo-java-driver-2.9.3.jar.
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import java.util.List;

public class MongoDBAccess {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Mongo mongoClient = null;
  try{
   mongoClient = new Mongo("127.0.0.1", 27017); // Change to proper server or port, I used the default one
   List databases = mongoClient.getDatabaseNames();
   for(String database : databases){
    System.out.println(database);
   }
  }
  catch(MongoException exc){
   System.out.println(exc.getMessage());
  }
  catch(Exception exc){
   System.out.println(exc.getMessage());
  }
  finally{
   if(mongoClient != null){
    mongoClient.close();
   }
  }
 }
}
Para mayor información, visiten: MongoDB - Java Language Center
For further information, visit: MongoDB - Java Language Center

domingo, 2 de febrero de 2014

Año bisiesto en Oracle.

Hoy expondré una función para determinar si un año es bisiesto en Oracle. Si tienen dudas acerca del algoritmo. Lo pueden checar el mi artículo de año bisiesto en Sql server.
CREATE OR REPLACE FUNCTION esBisiesto(fecha DATE)
RETURN NUMBER
AS
 esBisiesto NUMBER(1,0) := 0;
 anio NUMBER(4,0) := TO_NUMBER(TO_CHAR(fecha, 'YYYY'),'9999'); --Extrae el anio
BEGIN

 IF anio MOD 4 = 0 AND (anio MOD 100 <> 0 OR anio MOD 400 = 0)
    THEN
  esBisiesto := 1;
    END IF;
    RETURN esBisiesto;
END;

domingo, 26 de enero de 2014

Encender leds en secuencia con Arduino.

Hoy expondré como programar una secuencia de leds en Arduino.
Los leds encienden con lógica negativa, es decir en estado bajo (0) o conexión a tierra.
Los leds están conectados a los pines 10-13 de la tableta Arduino ADK. En el resto de las tabletas Arduino Uno también puede funcionar.
A continuación pueden ver el esquema eléctrico y el código fuente de Arduino.
// LUCES SECUENCIALES

// Se establecen las pines 10 al 13 como salidas digitales
int salidas[] = {10,11,12,13};
int contador = 0;

void setup() {                
  for(contador = 0; contador < 4; contador++){
    pinMode(salidas[contador], OUTPUT);
    digitalWrite(salidas[contador], HIGH); // La conexion del circuito es LOW ACTIVE, el estado HIGH apaga el led.
  }       
}

void loop() {
  contador = 0;
  while(contador < 4){
    digitalWrite(salidas[contador], LOW); // Enciende el led especificado en el arreglo
    delay(1000); // Retarda 1 segundo en el arreglo
    digitalWrite(salidas[contador], HIGH); // Apaga el led especificado en el arreglo
    if(contador == 4) contador = 0; // Reinicia la secuencia
    contador++; // Incrementa la salida de led a encender
  }
}