Introdução ao Sling CLI
Sling CLI é uma ferramenta de linha de comando que permite a movimentação fácil e eficiente de dados (Extrair e Carregar) de/para Bancos de Dados, Plataformas de Armazenamento e aplicativos SaaS. É trivial começar, você pode simplesmente executar pip install sling
se tiver o pip do Python instalado. Ou você pode baixar o binário para sua máquina aqui.
Credenciais de Conexão
Para usar sling
, devemos primeiro configurar as credenciais de conexão, e o Sling CLI as procura em vários lugares. Isso permite uma natureza “plug & play” se você já estiver usando outra ferramenta, como dbt
, ou tiver URLs de conexão definidos em variáveis de ambiente. No entanto, é recomendável usar o arquivo env.yaml
do Sling, pois permite uma experiência mais consistente e flexível.
Arquivo Env Sling
Na primeira vez que você executa o comando sling
, a pasta .sling
é criada no diretório inicial do usuário atual (~/.sling
), que por sua vez contém um arquivo chamado env.yaml
. A estrutura do arquivo Env do Sling é simples, você coloca a credencial de suas conexões na chave connections
conforme mostrado abaixo:
connections:
marketing_pg:
url: 'postgres://...'
ssh_tunnel: 'ssh://...' # opcional
# ou perfil dbt estilizado
marketing_pg:
type: postgres
host: [hostname]
user: [username]
password: [password]
port: [port]
dbname: [database name]
schema: [dbt schema]
ssh_tunnel: 'ssh://...'
finance_bq:
type: bigquery
method: service-account
project: [GCP project id]
dataset: [the name of your dbt dataset]
keyfile: [/path/to/bigquery/keyfile.json]
# variáveis globais, disponíveis para todas as conexões em tempo de execução (opcional)
variables:
aws_access_key: '...'
aws_secret_key: '...'
Consulte aqui para todos os tipos de conexão aceitos e seus respectivos pontos de dados necessários.
Ao usar o comando sling conns list
com credenciais Sling Env, a coluna SOURCE
será exibida como sling env yaml
.
Variáveis de ambiente
Se você preferir usar variáveis de ambiente, basta defini-las em seu ambiente de shell da maneira usual:
# Mac/Linux
export MY_PG='postgresql://user:mypassw@pg.host:5432/db1'
export MY_SNOWFLAKE='snowflake://user:mypassw@sf.host/db1'
export ORACLE_DB='oracle://user:mypassw@orcl.host:1521/db1'
# Windows Powershell
set MY_PG 'postgresql://user:mypassw@pg.host:5432/db1'
set MY_SNOWFLAKE 'snowflake://user:mypassw@sf.host/db1'
set ORACLE_DB 'oracle://user:mypassw@orcl.host:1521/db1'
Ao usar o comando sling conns list
com variáveis de ambiente, a coluna SOURCE
será exibida como env variable
.
Perfis DBT
dbt
é outra ferramenta popular que muitos profissionais de dados usam diariamente, e o suporte a perfis locais existentes facilita o uso cruzado. A localização típica das credenciais dbt está no arquivo ~/dbt/profiles.yml
. Veja aqui para mais detalhes.
Se você tiver credenciais dbt
e usar o comando sling conns list
, a coluna SOURCE
será exibida como dbt profiles yaml
.
O subcomando conns
Agora que você definiu as credenciais, o sling oferece um subcomando conns
para interagir com as conexões. Podemos realizar as seguintes operações: list
, test
e discover
.
$ sling conns -h
conns - Manage local connections
Usage:
conns [discover|list|test]
Subcommands:
discover list available streams in connection
list list local connections detected
test test a local connection
Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.
Listando Conexões
É conveniente ver e listar todas as conexões disponíveis em nosso ambiente. Podemos simplesmente executar o comando sling conns list
. Aqui está um exemplo:
$ sling conns list
+----------------------+------------------+-------------------+
| CONN NAME | CONN TYPE | SOURCE |
+----------------------+------------------+-------------------+
| AWS_S3 | FileSys - S3 | sling env yaml |
| AZURE_STORAGE | FileSys - Azure | sling env yaml |
| BIGQUERY | DB - BigQuery | sling env yaml |
| BIONIC_DB1 | DB - PostgreSQL | dbt profiles yaml |
| BTD_S3 | FileSys - S3 | sling env yaml |
| CLICKHOUSE | DB - Clickhouse | sling env yaml |
| DEMO_POSTGRES | DB - PostgreSQL | sling env yaml |
| GITHUB_DBIO | API - GitHub | sling env yaml |
| NOTION | API - Notion | sling env yaml |
| SNOWFLAKE | DB - Snowflake | env variable |
| STEAMPIPE | DB - PostgreSQL | sling env yaml |
+----------------------+------------------+-------------------+
Testando Conexões
A ferramenta Sling CLI também permite testar conexões. Assim que soubermos o nome da conexão, podemos usar o comando sling conns test
:
$ sling conns test -h
test - test a local connection
Usage:
test [name]
Positional Variables:
name The name of the connection to test (Required)
Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.
Aqui está um exemplo real:
$ sling conns test MSSQL
6:42PM INF success!
Descobrindo fluxos de conexão
Este é outro subcomando bacana que permite ver quais fluxos de dados estão disponíveis para que sling
seja lido para uma conexão específica: o comando sling conns discover
.
$ sling conns discover -h
discover - list available streams in connection
Usage:
discover [name]
Positional Variables:
name The name of the connection to test (Required)
Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.
-f --filter filter stream name by pattern (e.g. account_*)
--folder discover streams in a specific folder (for file connections)
--schema discover streams in a specific schema (for database connections)
Para conexões de banco de dados, listará as tabelas e visualizações disponíveis. Para conexões de armazenamento, ele listará os objetos de arquivo não recursivos localizados na pasta de origem especificada. Para conexões SaaS/API, ele listará todos os objetos disponíveis que existem para consumo. Abaixo estão alguns exemplos.
Conexões de Banco de Dados
$ sling conns discover CLICKHOUSE
6:57PM INF Found 68 streams:
- "default"."docker_logs"
- "default"."sling_docker_logs"
- "system"."aggregate_function_combinators"
- "system"."asynchronous_metric_log"
- "system"."asynchronous_metrics"
- "system"."build_options"
- "system"."clusters"
....
Se quisermos filtrar por um shema específico, podemos fazer:
$ sling conns discover CLICKHOUSE --schema default
8:29PM INF Found 2 streams:
- "default"."docker_logs"
- "default"."sling_docker_logs"
Conexões SaaS
$ sling conns discover NOTION
6:58PM INF Found 4 streams:
- blocks
- databases
- pages
- users
Conexões de Armazenamento
$ sling conns discover AWS_S3
6:52PM INF Found 7 streams:
- s3://my-sling-bucket/logging/
- s3://my-sling-bucket/part.01.0001.csv
- s3://my-sling-bucket/sling/
- s3://my-sling-bucket/temp/
- s3://my-sling-bucket/test.fs.write/
- s3://my-sling-bucket/test/
- s3://my-sling-bucket/test_1000.csv
Se quisermos ver os arquivos em uma subpasta, podemos fazer isso:
$ sling conns discover AWS_S3 --folder s3://my-sling-bucket/logging/
6:55PM INF Found 1 streams:
- s3://my-sling-bucket/logging/1/1.log.gz
Executando Tarefas EL
Agora que suas conexões estão definidas, você está pronto para executar algumas tarefas de extração e carregamento! Cobrimos isso em detalhes em um post separado, você pode ler sobre isso aqui. Na linha de comando, você também pode executar sling run -e
, que imprimirá vários exemplos.
Conclusão
Considerando tudo, o Sling CLI facilita o gerenciamento e a interação com vários tipos de conexões do seu shell. Se você tiver alguma dúvida ou sugestão, sinta-se à vontade para entrar em contato conosco aqui. Além disso, certifique-se de conferir o Sling Cloud, que é um serviço de nuvem que lida com suas várias necessidades de extração e carregamento em um modelo de preços competitivo.