Questa pagina descrive Calíope 1.5, la versione che stiamo costruendo adesso. La 1.4 è sull'App Store per iPad, iPhone, Apple Watch, Apple TV e Apple Vision Pro, e sul Mac il negozio serve oggi la 1.3 mentre la 1.4 è in revisione sull'App Store. Il changelog dice in quale versione è arrivata ogni funzione.
Aggiunge a ogni argomento un pulsante «Apri in Calíope». Funziona solo con l'app installata.
Apri e interroga database DuckDB locali su file, senza server.
Dove si trova: Workspace › Strumenti › Editor DuckDB
L'Editor DuckDB è uno strumento autonomo per i file .duckdb locali, con lo stesso impianto dell'Editor SQLite: Struttura, Dati, Esegui SQL e Impostazioni, e funziona senza connessione ad alcun server.
Può anche aprire un database in memoria — senza file — da Interroga file di dati…, per lavorare su un CSV, JSON o Parquet senza creare nulla su disco.
Quello che Calíope non fa con DuckDB. Non scarica estensioni — INSTALL, LOAD e UPDATE EXTENSIONS vengono rifiutate prima di toccare il motore —: ci sono solo le quattro incluse nell'app. Per lo stesso motivo, non esistono secret di accesso remoto (CREATE SECRET) e non si può fare ATTACH di un file SQLite o Postgres, che richiedono un'estensione non collegata. La configurazione del motore resta chiusa all'apertura: nessun SET diverso da threads/memory_limit dalle Impostazioni funziona, e nemmeno quelli via SQL diretto. E anche IMPORT DATABASE e COPY FROM DATABASE non funzionano: internamente cambiano un'opzione di configurazione che lo stesso motivo tiene bloccata.
Parole chiave: duckdb, file, locale, database, analitica
Apri un file .duckdb esistente o creane uno nuovo.
Dove si trova: Archivo
Usa Apri… per scegliere un file .duckdb esistente, o Nuovo database… per crearne uno vuoto. I file recenti compaiono nella schermata iniziale. Un'insegna Sola lettura compare quando un file non può essere modificato.
Se il file è fuori dalla cartella propria di Calíope, la prima volta viene chiesto l'accesso alla sua cartella: DuckDB deve scrivere un file .wal accanto al .duckdb, e il sandbox dell'app lo consente solo dentro una cartella scelta dall'utente. Viene ricordato per la prossima apertura di un file della stessa cartella. Nessun file DuckDB a portata di mano? Nello stato vuoto, Scarica il database di esempio apre la pagina del sito dove si trova l'esempio pubblico — un piccolo negozio con 50.000 ordini, creato con Calíope. L'app non scarica nulla: apre la pagina e decidi tu.
Parole chiave: aprire, creare, nuovo, recenti, file, cartella, wal
La sezione Struttura mostra l'albero dello schema con le colonne e il DDL di ogni oggetto. DuckDB non ha trigger, quindi l'albero mostra tabelle, viste, indici, sequenze, tipi, macro e macro di tabella. Sequenze, tipi e macro si creano da Esegui SQL —CREATE SEQUENCE, CREATE TYPE, CREATE MACRO, CREATE MACRO … AS TABLE—; qui si vedono e si eliminano. Se il file ha più di uno schema, ogni gruppo porta davanti il nome del suo, e il commento di un oggetto (COMMENT ON) appare al passaggio del mouse. Usa Nuovo per creare tabelle, indici o viste, Aggiungi colonna o Rinomina tabella sulla tabella selezionata, e Elimina per rimuovere un oggetto.
Le viste create da Interroga file di dati… hanno un'icona diversa — una graffetta — e il loro tooltip mostra il percorso del file di origine.
Allega database… apre un altro database DuckDB accanto a quello aperto; il suo contenuto compare nell'albero preceduto dal nome del database e si interroga come database.schema.tabella. È sempre in sola lettura —scriverci richiederebbe creare il suo file .wal accanto, cosa che la sandbox non permette— e Stacca lo rimuove. Un file SQLite non si può allegare qui: sono due motori diversi, ed è a questo che serve l'Editor SQLite.
Parole chiave: struttura, tabella, indice, vista, creare, ddl, schema
La sezione Dati mostra le righe di una tabella per pagine, con il conteggio e le frecce a destra della barra. Quante righe entrano in una pagina si sceglie in Preferenze › Editor di testo › Risultati › Righe per pagina — Impostazioni, su iPad. Ordina toccando l'intestazione di una colonna, restringi colonna per colonna con Filtri, oppure scrivi nel campo di ricerca per cercare in tutte insieme.
Modificare una cella
macOS: doppio clic su di essa. iPad: un solo tocco. Invio conferma; Esc annulla.
Aggiungere ed eliminare righe
Aggiungi riga apre un modulo con una riga per colonna. A differenza di SQLite, DuckDB non assegna da sé l'intera chiave primaria: ogni colonna obbligatoria ha bisogno del proprio valore, chiave compresa. Per eliminare, seleziona la riga dal suo numero e usa Elimina riga.
Niente di tutto questo tocca il file finché non premi Salva modifiche: ciò che modifichi resta in una transazione in sospeso che Annulla modifiche disfa per intero.
Parole chiave: dati, righe, modificare, filtrare, ordinare, cercare, cella, inserire, nuova riga, eliminare
Evidenziazione della sintassi e completamento, con limite di righe e pulsante Interrompi.
La sezione Esegui SQL usa lo stesso campo di testo e la stessa griglia di risultati dell'Editor SQL da server, sul file aperto e senza alcuna connessione.
Il testo è evidenziato. Premi Esegui, o ⌘↩, per eseguire l'intero script; viene disegnato il risultato dell'ultima istruzione che ha restituito righe. Un SELECT grande non viene portato per intero: viene tagliato in Preferenze › Editor di testo › Risultati › Limite di righe — lo stesso limite dell'Editor SQL —, e la griglia dice quante righe su quante ha portato.
Mentre una query è in corso, un pulsante Interrompi la interrompe per davvero: il motore la taglia a metà strada, senza aspettare che finisca.
INSTALL e LOAD vengono rifiutati: Calíope non scarica estensioni DuckDB, quindi una query che ne avesse bisogno non viene eseguita, con il motivo spiegato nel messaggio.
Ciò che scrivi nel file resta in sospeso, come una modifica in Dati: non tocca il file prima di Salva modifiche.
Le modifiche restano in sospeso finché non le salvi.
Le modifiche vengono raggruppate in una transazione in sospeso, come nell'Editor SQLite. Un punto ambra indica modifiche non salvate. Usa Salva modifiche per confermarle o Annulla modifiche per scartarle. Chiudere con modifiche in sospeso chiede conferma.
DuckDB scrive prima in un file .wal accanto al .duckdb; il riversamento nel file principale (CHECKPOINT) è asincrono, quindi il .wal può impiegare qualche secondo a sparire dopo il salvataggio e la chiusura — il dato è già al sicuro, anche se quel file accessorio resta lì ancora un momento.
Parole chiave: salvare, ripristinare, confermare, transazione, modifiche, wal, checkpoint
Da Importa / Esporta puoi importare un file CSV in una nuova tabella di colonne testo, esportare una tabella in CSV o JSON, o esportare l'intero database come dump SQL (schema e dati).
Questo è diverso da Interroga file di dati…: qui il CSV viene copiato dentro il file .duckdb come nuova tabella; lì il file resta dov'è e viene solo interrogato tramite una vista.
Con DuckDB il CSV lo legge il motore stesso (COPY … AUTO_DETECT), così ogni colonna entra con il suo tipo e non come testo. E Database intero riversa tutto il database in una cartella scelta da te —in CSV o in Parquet, con lo schema accanto— oppure legge nel database aperto ciò che ha lasciato un'altra esportazione. Se il database è in memoria, Salva come… lo scrive per intero in un file .duckdb e prosegue su quello.
Tutte e tre richiedono che non ci siano modifiche non salvate: il motore non le esegue dentro una transazione aperta.
Parole chiave: importare, esportare, csv, json, sql, dump
Interroga un CSV, JSON o Parquet come se fosse una tabella, senza copiarlo.
Il pulsante Interroga file di dati… crea, per ogni file scelto, una vista su di esso — read_csv_auto, read_json_auto o read_parquet a seconda dell'estensione: il file resta dov'è e viene letto al volo ogni volta che si interroga la vista, senza copiarne i dati dentro il database.
Il nome della vista viene dal nome del file, senza estensione; se due file darebbero lo stesso nome, al secondo si aggiunge _2, al terzo _3, e così via. In Struttura, queste viste hanno un'icona diversa — una graffetta — e il loro tooltip mostra il percorso del file di origine.
Se non c'è nessun database aperto, il pulsante apre prima un database in memoria: non esiste alcun file .duckdb su disco, quindi Salva con nome… — che ancora non fa nulla — è l'unico modo per non perdere il lavoro alla chiusura. Quel database in memoria non va più perso: Salva come… lo scrive per intero in un file .duckdb e l'editor prosegue su quel file.
Parole chiave: csv, json, parquet, interrogare, vista, collegare, in memoria