sq/cli/cmd_root.go
Neil O'Toole a92b9abf34
Initial work on a JSON driver (#70)
* implementation work for json importers

* json driver checkpoint

* working on json.ParseObjectsInArray

* json.ParseObjectsInArray seems to be working

* checkpoint while tidying up ParseObjectsInArray

* more tidy checkpoint

* more tidy checkpoint 2

* tidying up ParseObjectsInArray

* tidy up

* code/docs cleanup

* more cleanup of json driver

* more cleanup of json driver

* flat json import seemingly working

* improvements to json driver

* json writer now prints empty [] for postgres empty tables
2020-10-20 09:05:43 -06:00

90 lines
2.4 KiB
Go

package cli
import (
"github.com/spf13/cobra"
// Import the providers package to initialize provider implementations
_ "github.com/neilotoole/sq/drivers"
)
func newRootCmd() *cobra.Command {
cmd := &cobra.Command{
Use: `sq QUERY`,
Short: "sq",
Long: `sq is a swiss army knife for data.
Use sq to query Postgres, SQLite, SQLServer, MySQL, CSV, TSV
and Excel, and output in text, JSON, CSV, Excel, HTML, etc., or
output to a database table.
You can query using sq's own jq-like syntax, or in native SQL.
More at https://sq.io
`,
Example: ` # pipe an Excel file and output the first 10 rows from sheet1
cat data.xlsx | sq '.sheet1 | .[0:10]'
# add Postgres source identified by handle @sakila_pg
sq add --handle=@sakila_pg 'postgres://user:pass@localhost:5432/sakila?sslmode=disable'
# add SQL Server source; will have generated handle @sakila_mssql
sq add 'sqlserver://user:pass@localhost?database=sakila'
# list available data sources
sq ls
# ping all data sources
sq ping all
# set active data source
sq src @sakila_pg
# get specified cols from table address in active data source
sq '.address | .address_id, .city, .country'
# get metadata (schema, stats etc) for data source
sq inspect @sakila_pg
# get metadata for a table
sq inspect @pg1.person
# output in JSON
sq -j '.person | .uid, .username, .email'
# output in table format (with header)
sq -th '.person | .uid, .username, .email'
# output in table format (no header)
sq -t '.person | .uid, .username, .email'
# output to a HTML file
sq --html '@sakila_sl3.actor' -o actor.html
# join across data sources
sq '@my1.person, @pg1.address | join(.uid) | .username, .email, .city'
# insert query results into a table in another data source
sq --insert=@pg1.person '@my1.person | .username, .email'
# execute a database-native SQL query, specifying the source
sq sql --src=@pg1 'SELECT uid, username, email FROM person LIMIT 2'
# copy a table (in the same source)
sq tbl copy @sakila_sl3.actor .actor2
# truncate tables
sq tbl truncate @sakila_sl3.actor2
# drop table
sq tbl drop @sakila_sl3.actor2
`,
BashCompletionFunction: bashCompletionFunc,
}
addQueryCmdFlags(cmd)
cmd.Flags().Bool(flagVersion, false, flagVersionUsage)
cmd.PersistentFlags().BoolP(flagMonochrome, flagMonochromeShort, false, flagMonochromeUsage)
return cmd
}