Esta página describe Calíope 1.5, la versión que estamos construyendo ahora mismo. La 1.4 ya está en la App Store para iPad, iPhone, Apple Watch, Apple TV y Apple Vision Pro, y en el Mac la tienda sirve hoy la 1.3 mientras la 1.4 está en revisión de App Store. El changelog dice en qué versión llegó cada función.
Añade un botón «Abrir en Calíope» a cada tema. Sólo funciona con la app instalada.
Abre y consulta bases DuckDB de archivo local, sin servidor.
Dónde está: Espacio de Trabajo › Herramientas › Editor DuckDB
El Editor DuckDB es una herramienta autónoma para archivos .duckdb locales, con el mismo diseño que el Editor SQLite: Estructura, Datos, Ejecutar SQL y Ajustes, y funciona sin conexión a ningún servidor.
También abre una base en memoria —sin archivo— desde Consultar archivo de datos…, para trabajar sobre un CSV, JSON o Parquet sin crear nada en disco.
Lo que Calíope no hace con DuckDB. No descarga extensiones —INSTALL, LOAD y UPDATE EXTENSIONS se rechazan antes de tocar el motor—: sólo están las cuatro que trae la app. Por lo mismo, no hay secretos de acceso remoto (CREATE SECRET) ni se puede hacer ATTACH de un archivo SQLite o de Postgres, que necesitan una extensión que no se enlaza. La configuración del motor queda cerrada al abrir: ningún SET que no sea threads/memory_limit desde Ajustes funciona, y ni siquiera ésos por SQL directo. Y IMPORT DATABASE y COPY FROM DATABASE tampoco funcionan: por dentro cambian una opción de configuración que la misma razón mantiene bloqueada.
Palabras clave: duckdb, archivo, local, base de datos, analítica
Abre un archivo .duckdb existente o crea uno nuevo.
Dónde está: Archivo
Usa Abrir… para elegir un archivo .duckdb existente, o Nueva base… para crear uno vacío. Los archivos recientes aparecen en la pantalla inicial. Una insignia Solo lectura aparece cuando un archivo no se puede modificar.
Si el archivo está fuera de la carpeta de Calíope, la primera vez se pide acceso a su carpeta: DuckDB necesita escribir un archivo .wal junto al .duckdb, y el sandbox de la app sólo lo permite dentro de una carpeta que el usuario haya elegido. Se recuerda para la próxima vez que se abra un archivo de la misma carpeta. ¿No tienes ningún archivo DuckDB a mano? En el estado vacío, Descargar base de ejemplo abre la página del sitio donde está la muestra pública —una tienda con 50 000 pedidos, hecha con Calíope—. La app no descarga nada: abre la página y decides tú.
La sección Estructura muestra el árbol del esquema con las columnas y el DDL de cada objeto. DuckDB no tiene triggers, así que el árbol enseña tablas, vistas, índices, secuencias, tipos, macros y macros de tabla. Secuencias, tipos y macros se crean desde Ejecutar SQL —CREATE SEQUENCE, CREATE TYPE, CREATE MACRO, CREATE MACRO … AS TABLE—; desde aquí se ven y se borran. Si el archivo tiene más de un esquema, cada grupo lleva delante el nombre del suyo, y el comentario de un objeto (COMMENT ON) se enseña al pasar por encima. Usa Nuevo para crear tablas, índices o vistas, Añadir columna o Renombrar tabla sobre la tabla seleccionada, y Eliminar para borrar un objeto.
Las vistas creadas por Consultar archivo de datos… llevan un icono distinto —un clip— y su tooltip enseña la ruta del archivo de origen.
Adjuntar base… abre otra base DuckDB junto a la que ya tienes y su contenido aparece en el árbol con el nombre de la base delante; se consulta escribiendo base.esquema.tabla. Va siempre en sólo lectura —escribir en ella pediría crear su archivo .wal al lado, que el sandbox no permite—, y Separar la quita. Un archivo SQLite no se puede adjuntar aquí: son dos motores distintos, y para eso está el Editor SQLite.
La sección Datos muestra las filas de una tabla por páginas, con el contador y las flechas a la derecha de la barra. Cuántas filas trae una página lo eliges en Preferencias › Editor de texto › Resultados › Filas por página —Ajustes, en el iPad—. Ordena pulsando la cabecera de una columna, acota columna a columna con Filtros, o escribe en el campo de búsqueda para mirar en todas a la vez.
Editar una celda
macOS: doble clic sobre ella. iPad: un solo toque. Intro confirma; Esc cancela.
Añadir y eliminar filas
Añadir fila abre un formulario con un renglón por columna. A diferencia de SQLite, DuckDB no autoasigna la clave primaria entera: cada columna obligatoria necesita su valor, incluida la clave. Para eliminar, selecciona la fila por su número y usa Eliminar fila.
Nada de esto toca el archivo hasta que pulsas Guardar cambios: lo editado queda en una transacción pendiente que Revertir cambios deshace entera.
Resaltado y autocompletado, con un tope de filas y un botón Detener.
La sección Ejecutar SQL usa el mismo campo de texto y la misma rejilla de resultados que el Editor SQL de servidor, sobre el archivo abierto y sin ninguna conexión de por medio.
El texto va resaltado. Pulsa Ejecutar, o ⌘↩, para correr el script entero; se dibuja el resultado de la última sentencia que devolvió filas. Un SELECT grande no se trae entero: se corta en Preferencias › Editor de texto › Resultados › Techo de filas —el mismo tope del Editor SQL—, y la rejilla dice cuántas de cuántas trajo.
Mientras una consulta corre, un botón Detener la interrumpe de verdad: el motor la corta a mitad de camino, no espera a que termine.
INSTALL y LOAD se rechazan: Calíope no descarga extensiones de DuckDB, así que una consulta que las necesite no se ejecuta, con el motivo explicado en el mensaje.
Lo que escriba en el archivo queda pendiente, igual que una edición en Datos: no toca el archivo hasta Guardar cambios.
Los cambios quedan pendientes hasta que los guardas.
Las ediciones se agrupan en una transacción pendiente, igual que en el Editor SQLite. Un punto ámbar indica cambios sin guardar. Usa Guardar cambios para confirmarlos o Revertir cambios para descartarlos. Al cerrar con cambios pendientes se pide confirmación.
DuckDB escribe primero en un archivo .wal junto al .duckdb; el volcado al archivo principal (CHECKPOINT) es asíncrono, así que el .wal puede tardar unos segundos en desaparecer después de guardar y cerrar —el dato ya está a salvo, aunque el archivo auxiliar siga ahí un momento—.
Desde Importar / Exportar puedes importar un archivo CSV a una tabla nueva de columnas de texto, exportar una tabla a CSV o JSON, o exportar toda la base a un volcado SQL (esquema y datos).
Esto es distinto de Consultar archivo de datos…: aquí el CSV se copia dentro del archivo .duckdb como una tabla nueva; allí el archivo se queda donde está y sólo se consulta a través de una vista.
Con DuckDB, el CSV lo lee el propio motor (COPY … AUTO_DETECT), así que cada columna entra con su tipo y no como texto. Y Base entera vuelca toda la base a una carpeta que elijas —en CSV o en Parquet, con el esquema al lado— o lee en la base abierta lo que dejó otra exportación. Si la base está en memoria, Guardar como… la escribe entera en un archivo .duckdb y sigue trabajando sobre él.
Las tres piden que no haya cambios sin guardar: el motor no las deja correr dentro de una transacción abierta.
Consulta un CSV, JSON o Parquet como si fuera una tabla, sin copiarlo.
El botón Consultar archivo de datos… crea, por cada archivo elegido, una vista sobre él —read_csv_auto, read_json_auto o read_parquet según su extensión—: el archivo se queda donde está y se lee al vuelo cada vez que se consulta la vista, sin copiar sus datos dentro de la base.
El nombre de la vista sale del nombre del archivo, sin su extensión; si dos archivos darían el mismo nombre, al segundo se le añade _2, al tercero _3, y así. En Estructura, estas vistas llevan un icono distinto —un clip— y su tooltip enseña la ruta del archivo de origen.
Si no hay ninguna base abierta, el botón abre primero una base en memoria: no existe ningún archivo .duckdb en disco, así que Guardar como… —que todavía no hace nada— es el único camino para no perder el trabajo al cerrar. Esa base en memoria ya se puede conservar: Guardar como… la escribe entera en un archivo .duckdb y el editor sigue trabajando sobre él.
Palabras clave: csv, json, parquet, consultar, vista, adjuntar, en memoria