
Slings from a data source to a data target.
See docs.slingdata.io for more details.
Sling is a passion project turned into a free CLI Product which offers an easy solution to create and maintain small to medium volume data pipelines using the Extract & Load (EL) approach. It focuses on data movement between:
- Database to Database
- File System to Database
- Database to File System
- API to Database
- API to File System
https://github.com/slingdata-io/sling-cli/assets/7671010/e10ee716-1de8-4d53-8eb2-95c6d9d7f9f0
Some key features:
- Single Binary deployment (built with Go). See installation page.
- Use Custom SQL as a stream:
--src-stream='select * from my_table where col1 > 10' - Manage / View / Test / Discover your connections with the
sling connssub-command - Use Environment Variable as connections if you prefer (
export MY_PG='postgres//...)' - Provide YAML or JSON configurations (perfect for git version control).
- Powerful Replication logic, to replication many tables with a wildcard (
my_schema.*). - Reads your existing DBT connections
- Use your environment variable in your YAML / JSON config (
select * from my_table where date = '{date}') - Convenient Transformations, such as the
flattenoption, which auto-creates columns from your nested fields. - Run Pre & Post SQL commands.
- many more!
Example Replication:
Available Connectors:
Databases:
adbcazuredwhazuresqlazuretablebigquerybigtableclickhoused1databricksduckdbelasticsearchexasolfabricmariadbmongodbmotherduckmysqlodbcoraclepostgresprometheusprotonredshiftscylladbsnowflakesqlitesqlserverstarrockstrinoFile Systems:
azureb2dospacesgslocalminior2s3sftpwasabiFile Formats:
csv,parquet,xlsx,json,geojson,avro,xml,sas7bday
Here are some additional links:
Ever wanted to quickly pipe in a CSV or JSON file into your database? Use sling to do so:
cat my_file.csv | sling run --tgt-conn MYDB --tgt-object my_schema.my_table
Or want to copy data between two databases? Do it with sling:
sling run --src-conn PG_DB --src-stream public.transactions \
--tgt-conn MYSQL_DB --tgt-object mysql.bank_transactions \
--mode full-refresh
Sling can also easily manage our local connections with the sling conns command:
$ sling conns set MY_PG url='postgresql://postgres:myPassword@pghost:5432/postgres'
$ sling conns list
+--------------------------+-----------------+-------------------+
| CONN NAME | CONN TYPE | SOURCE |
+--------------------------+-----------------+-------------------+
| AWS_S3 | FileSys - S3 | sling env yaml |
| FINANCE_BQ | DB - BigQuery | sling env yaml |
| DO_SPACES | FileSys - S3 | sling env yaml |
| LOCALHOST_DEV | DB - PostgreSQL | dbt profiles yaml |
| MSSQL | DB - SQLServer | sling env yaml |
| MYSQL | DB - MySQL | sling env yaml |
| ORACLE_DB | DB - Oracle | env variable |
| MY_PG | DB - PostgreSQL | sling env yaml |
+--------------------------+-----------------+-------------------+
$ sling conns discover LOCALHOST_DEV
9:05AM INF Found 344 streams:
- "public"."accounts"
- "public"."bills"
- "public"."connections"
...
Installation
One-liner on Mac / Linux
curl -fsSL https://slingdata.io/install.sh | bash
# You're good to go!
sling -h
One-liner on Windows (PowerShell)
irm https://slingdata.io/install.ps1 | iex
# You're good to go!
sling -h
Brew on Mac
brew install slingdata-io/sling/sling
Scoop on Windows
scoop bucket add sling https