Skip to content

AxonOps — AI-Native Control Plane for Open Source Data Platforms

CQLAI Data Import/Export

Import and export data using CQLAI with support for multiple formats.

cqlai> .export users /tmp/users.csv
Exporting users to /tmp/users.csv...
Exported 10,532 rows in 2.3s
cqlai> .export users /tmp/users.json --format json
Exporting users to /tmp/users.json...
Exported 10,532 rows in 2.8s
cqlai> .export "SELECT user_id, email FROM users WHERE status = 'active'" /tmp/active_users.csv
Exporting query results to /tmp/active_users.csv...
Exported 8,234 rows in 1.9s
cqlai> .export users /tmp/users.csv \
--format csv \
--delimiter ";" \
--quote "'" \
--header true \
--null-value "NULL" \
--batch-size 5000
OptionDescriptionDefault
--formatOutput format (csv, json, jsonl)csv
--delimiterCSV field delimiter,
--quoteCSV quote character"
--headerInclude header rowtrue
--null-valueRepresentation for NULL(empty)
--batch-sizeRows per batch1000
--compressGzip outputfalse
cqlai> .export users /tmp/users.csv.gz --compress
Exporting users to /tmp/users.csv.gz (compressed)...
Exported 10,532 rows in 1.8s (compressed 12MB → 2.1MB)
cqlai> .export "SELECT user_id, username, email FROM users" /tmp/users_subset.csv
cqlai> .import /tmp/users.csv users
Importing /tmp/users.csv into users...
Imported 10,532 rows in 4.2s
cqlai> .import /tmp/users.json users --format json
Importing /tmp/users.json into users...
Imported 10,532 rows in 5.1s
cqlai> .import /tmp/users.csv users \
--format csv \
--delimiter "," \
--skip-header true \
--batch-size 100 \
--consistency LOCAL_QUORUM \
--skip-errors true \
--max-errors 100
OptionDescriptionDefault
--formatInput format (csv, json, jsonl)auto-detect
--delimiterCSV field delimiter,
--skip-headerSkip first rowtrue
--batch-sizeRows per batch insert100
--consistencyWrite consistency levelLOCAL_ONE
--skip-errorsContinue on errorsfalse
--max-errorsMax errors before abort0 (unlimited)
--dry-runValidate without insertingfalse
cqlai> .import /tmp/users.csv users --preview
Preview of /tmp/users.csv:
Detected columns: user_id (uuid), username (text), email (text), created_at (timestamp)
Sample rows:
┌──────────────────────────────────────┬──────────┬─────────────────────┬─────────────────────┐
│ user_id │ username │ email │ created_at │
├──────────────────────────────────────┼──────────┼─────────────────────┼─────────────────────┤
│ 123e4567-e89b-12d3-a456-426614174000 │ alice │ alice@example.com │ 2024-01-15 10:30:00 │
│ 223e4567-e89b-12d3-a456-426614174001 │ bob │ bob@example.com │ 2024-01-16 14:22:00 │
│ 323e4567-e89b-12d3-a456-426614174002 │ charlie │ charlie@example.com │ 2024-01-17 09:15:00 │
└──────────────────────────────────────┴──────────┴─────────────────────┴─────────────────────┘
Total rows: 10,532
Proceed with import? [y/N]:
cqlai> .import /tmp/legacy_users.csv users \
--mapping "id:user_id,name:username,mail:email"
Column mapping:
id → user_id
name → username
mail → email
user_id,username,email,created_at
123e4567-e89b-12d3-a456-426614174000,alice,alice@example.com,2024-01-15T10:30:00Z
223e4567-e89b-12d3-a456-426614174001,bob,bob@example.com,2024-01-16T14:22:00Z
[
{
"user_id": "123e4567-e89b-12d3-a456-426614174000",
"username": "alice",
"email": "alice@example.com",
"created_at": "2024-01-15T10:30:00Z"
},
{
"user_id": "223e4567-e89b-12d3-a456-426614174001",
"username": "bob",
"email": "bob@example.com"
}
]
{"user_id": "123e4567-e89b-12d3-a456-426614174000", "username": "alice", "email": "alice@example.com"}
{"user_id": "223e4567-e89b-12d3-a456-426614174001", "username": "bob", "email": "bob@example.com"}
Source FormatCassandra TypeNotes
StringuuidAuto-parsed if valid UUID
ISO 8601timestamp2024-01-15T10:30:00Z
Unix timestamptimestampMilliseconds since epoch
true/falsebooleanCase-insensitive
JSON arraylist["a", "b", "c"]
JSON objectmap{"key": "value"}
Base64blobAuto-detected
# List type
user_id,tags
123...,["admin","active","verified"]
# Map type
user_id,preferences
123...,{"theme": "dark", "notifications": "true"}
# Set type
user_id,roles
123...,["user","moderator"]
cqlai> .export source_keyspace.users /tmp/users.json --format json
cqlai> USE target_keyspace;
cqlai> .import /tmp/users.json users --format json
# Export schema
cqlai> DESCRIBE KEYSPACE source_ks > /tmp/schema.cql
# Export data
cqlai> .export source_ks.table1 /tmp/table1.csv
cqlai> .export source_ks.table2 /tmp/table2.csv
# Create schema on target
cqlai -h target-host -f /tmp/schema.cql
# Import data
cqlai -h target-host
cqlai> .import /tmp/table1.csv table1
cqlai> .import /tmp/table2.csv table2
cqlai> .export "SELECT * FROM events WHERE event_date = '2024-01-15'" \
/tmp/events_20240115.csv
cqlai> .import /tmp/users.csv users --skip-errors --error-log /tmp/errors.log
Import completed with errors:
Imported: 10,432 rows
Failed: 100 rows
Error log: /tmp/errors.log
Line 1523: Invalid UUID format: "not-a-uuid" for column user_id
Line 2891: Type mismatch: expected timestamp, got "invalid-date"
Line 3042: Missing required column: user_id
  1. Use appropriate batch size - Default 100, increase for faster imports
  2. Lower consistency for bulk imports - Use LOCAL_ONE
  3. Compress large exports - Use --compress for network transfer
  4. Use JSONL for streaming - Better memory efficiency than JSON array
  5. Disable tracing during bulk operations - Reduces overhead