简介

sling 的核心特性如下:

  • 使用Go语言开发,单个二进制文件部署
  • 支持使用自定义的SQL
  • 支持对数据源连接的管理、查看、测试和发现
  • 支持使用环境变量作为数据源连接
  • 支持 YAML 或者 JSON 配置文件,并支持在配置文件中使用环境变量
  • 支持通配符匹配多表同步
  • 支持转变配置
  • 支持 Pre 和 Post SQL 执行

sling 目前支持的数据源如下:

  • 支持的数据库:

    • bigquery
    • bigtable
    • clickhouse
    • duckdb
    • mariadb
    • motherduck
    • mysql
    • oracle
    • postgres
    • redshift
    • snowflake
    • sqlite
    • sqlserver
    • starrocks
    • prometheus
    • proton
  • 支持的文件系统:

    • azure
    • b2
    • dospaces
    • gs
    • local
    • minio
    • r2
    • s3
    • sftp
    • wasabi
  • 支持的文件格式:

    • csv
    • parquet
    • xlsx
    • json
    • avro
    • xml
    • sas7bday

安装

Mac

1
brew install slingdata-io/sling/sling

Linux

1
2
3
4
curl -LO 'https://github.com/slingdata-io/sling-cli/releases/latest/download/sling_linux_amd64.tar.gz' \
  && tar xf sling_linux_amd64.tar.gz \
  && rm -f sling_linux_amd64.tar.gz \
  && chmod +x sling

Docker

1
2
docker pull slingdata/sling
docker run --rm -i slingdata/sling --help

测试

配置文件

配置文件查找路径:

  • 环境变量
  • 环境变量文件 (~/.sling/env.yaml)
  • DBT配置文件 (~/.dbt/profiles.yml)

常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 查看连接
sling conns list

# 设置环境变量
export MY_PG='postgresql://test:password@localhost:5432/test?sslmode=disable'
export MY_MYSQL='mysql://test:password@localhost:3306/test?tls=skip-verify'
export MY_ORACLE='oracle://test:password@localhost:1521/freepdb1'

# 测试连接
sling conns test MY_PG
sling conns test MY_MYSQL
sling conns test MY_ORACLE

# 发现数据
sling conns discover MY_PG 
sling conns discover MY_PG --pattern public
sling conns discover MY_PG --pattern public.test --columns

sling conns discover MY_MYSQL
sling conns discover MY_MYSQL --pattern test
sling conns discover MY_MYSQL --pattern test.test --columns

# 输出数据
sling conns discover MY_PG --pattern public.test --columns
sling run --src-conn MY_PG --src-stream 'select * from public.test where id > 0 limit 10' --stdout

sling conns discover MY_MYSQL --pattern test.login_audits --columns
sling run --src-conn MY_MYSQL --src-stream 'test.login_audits' --stdout

# 设置数据库连接
sling conns set MY_PG url='postgresql://test:password@pghost:5432/test?sslmode=disable'
sling conns set MY_MYSQL url="mysql://test:password@localhost:3306/mydatabase?tls=skip-verify"
sling conns set MY_ORACLE url="oracle://test:password@localhost:1521/FREEPDB1"

# 设置连接(s3)
sling conns set AWS_S3 type=s3 bucket=sling-bucket access_key_id=ACCESS_KEY_ID secret_access_key="SECRET_ACCESS_KEY"

Database to Database

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
sling run --src-conn POSTGRES_URL --src-stream myschema.mytable \
  --tgt-conn SNOWFLAKE_URL --tgt-object yourschema.yourtable \
  --mode full-refresh

sling run -c '
source:
  conn: $POSTGRES_URL
  stream: myschema.mytable

target:
  conn: $SNOWFLAKE_URL
  object: yourschema.yourtable

mode: full-refresh
'
# OR
sling run -c /path/to/config.json

File System to Database

1
cat my_file.csv | sling run --tgt-conn MYDB --tgt-object my_schema.my_table

Database to File System

File System to File System

高阶用法

代码集成示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

import (
    "log"

    "github.com/slingdata-io/sling-cli/core/sling"
)

func main() {
  // cfgStr can be JSON or YAML
    cfgStr := `
    source:
        conn: $POSTGRES_URL
        stream: myschema.mytable

    target:
        conn: $SNOWFLAKE_URL
        object: yourschema.yourtable

    mode: full-refresh
  `
    cfg, err := sling.NewConfig(cfgStr)
    if err != nil {
        log.Fatal(err)
    }

    err = sling.Sling(cfg)
    if err != nil {
        log.Fatal(err)
    }
}