Saltar al contenido principal

3 publicaciones etiquetados con "elt"

Ver Todas las Etiquetas

· 8 min de lectura
Fritz larco

Almacenes de datos en la nube

En los últimos años, hemos visto un rápido crecimiento en el uso de almacenes de datos en la nube (así como el paradigma de "warehouse-first"). Dos plataformas DWH en la nube populares son BigQuery y Snowflake. Consulte el siguiente gráfico para ver su evolución a lo largo del tiempo.

Imagen: Gartner a través de Adam Ronthal (@aronthal) en Twitter. Imagen: Gartner vía Adam Ronthal (@aronthal) en Twitter.

BigQuery, que ocupa el puesto número 4 a partir de 2021, es un servicio de almacenamiento de datos sin servidor totalmente administrado que ofrece Google Cloud Platform (GCP). Permite un análisis fácil y escalable de petabytes de datos y es conocida desde hace mucho tiempo por su facilidad de uso y su naturaleza libre de mantenimiento.

Snowflake, es un servicio similar ofrecido por la empresa Snowflake Inc. Una de las principales diferencias es que Snowflake le permite alojar la instancia en Amazon Web Services (AWS), Azure (Microsoft) o GCP (Google). Esta es una gran ventaja si ya está establecido en un entorno que no es GCP.

Exportando y Cargando los datos

Según las circunstancias, a veces es necesario o se desea copiar datos de un entorno de BigQuery a un entorno de Snowflake. Echemos un vistazo y analicemos los diversos pasos lógicos necesarios para mover correctamente estos datos, ya que ninguno de los servicios de la competencia tiene una función integrada para hacerlo fácilmente. Por el bien de nuestro ejemplo, supondremos que nuestro entorno Snowflake de destino está alojado en AWS.

Procedimiento paso a paso

Para migrar datos de BigQuery a Snowflake (AWS), estos son los pasos esenciales:

  1. Identifique la tabla o consulta y ejecute EXPORT DATA OPTIONS consulta para exportar a Google Cloud Storage (GCS).

  2. Ejecute el script en la máquina virtual o en la máquina local para copiar los datos de GCS en la etapa interna de Snowflake. También podríamos leer directamente desde GCS con una integración de almacenamiento, pero esto implica otra capa de configuración de acceso seguro (que puede ser preferible para su caso de uso).

  3. Genere manualmente CREATE TABLE DDL con los tipos de datos de columna correctos y ejecútelo en Snowflake.

  4. Ejecute una consulta COPY en Snowflake para importar archivos preparados.

  5. Opcionalmente, limpie (elimine) los datos temporales en GCP y en la etapa interna.

    Imagen: Pasos para exportar manualmente de BigQuery a Snowflake.

    Como se demostró anteriormente, hay varios pasos para que esto suceda, en los que es necesario interactuar con sistemas independientes. Esto puede ser engorroso de automatizar, especialmente generar el DDL correcto (n. ° 3) con los tipos de columna adecuados en el sistema de destino (lo que personalmente considero más engorroso, intente hacer esto para tablas con más de 50 columnas).

    Afortunadamente, hay una manera más fácil de hacer esto, y es usando una ingeniosa herramienta llamada Sling. Sling es una herramienta de integración de datos que permite el movimiento fácil y eficiente de datos (Extracción y carga) desde/hacia bases de datos, plataformas de almacenamiento y aplicaciones SaaS. Hay dos formas de usarlo: Sling CLI y Sling Cloud. ¡Haremos el mismo procedimiento que el anterior, pero solo proporcionando entradas a sling y automáticamente hará los intrincados pasos por nosotros!

Uso de la CLI de Sling

Si eres un fanático de la línea de comandos, Sling CLI es para ti. Está integrado en go (lo que lo hace súper rápido) y funciona con archivos, bases de datos y varios puntos finales SaaS. También puede funcionar con Unix Pipes (lee la entrada estándar y escribe en la salida estándar). Podemos instalarlo rápidamente desde nuestro shell:

#  En Mac
brew install slingdata-io/sling/sling

# En Windows PowerShell
scoop bucket add org https://github.com/slingdata-io/scoop-sling.git
scoop install sling

# Uso de Python Wrapper a través de pip
pip install sling

Consulte aquí para conocer otras opciones de instalación (incluido Linux). También hay una biblioteca envoltorio de Python, que es útil si prefiere interactuar con Sling dentro de Python.

Una vez instalado, deberíamos poder ejecutar el comando sling, que debería darnos este resultado:

sling - An Extract-Load tool | https://slingdata.io/es
Slings data from a data source to a data target.
Version 0.86.52

Usage:
sling [conns|run|update]

Subcommands:
conns Manage local connections
run Execute an ad-hoc task
update Update Sling to the latest version

Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.

Ahora hay muchas formas de configurar tareas, pero para nuestro alcance en este artículo, primero debemos agregar credenciales de conexión para BigQuery y Snowflake (una tarea de una sola vez). Podemos hacer esto abriendo el archivo ~/.sling/env.yaml y agregando las credenciales, que deberían verse así:

~/.sling/env.yaml
connections:

BIGQUERY:
type: bigquery
project: sling-project-123
location: US
dataset: public
gc_key_file: ~/.sling/sling-project-123-ce219ceaef9512.json
gc_bucket: sling_us_bucket # this is optional but recommended for bulk export.

SNOWFLAKE:
type: snowflake
username: fritz
password: my_pass23
account: abc123456.us-east-1
database: sling
schema: public

Genial, ahora probemos nuestras conexiones:

$ sling conns list
+------------+------------------+-----------------+
| CONN NAME | CONN TYPE | SOURCE |
+------------+------------------+-----------------+
| BIGQUERY | DB - Snowflake | sling env yaml |
| SNOWFLAKE | DB - PostgreSQL | sling env yaml |
+------------+------------------+-----------------+

$ sling conns test BIGQUERY
6:42PM INF success!

$ sling conns test SNOWFLAKE
6:42PM INF success!

Fantástico, ahora que tenemos nuestras conexiones configuradas, podemos ejecutar nuestra tarea:

$ sling run --src-conn BIGQUERY --src-stream "select user.name, activity.* from public.activity join public.user on user.id = activity.user_id where user.type != 'external'" --tgt-conn SNOWFLAKE --tgt-object 'public.activity_user' --mode full-refresh
11:37AM INF connecting to source database (bigquery)
11:37AM INF connecting to target database (snowflake)
11:37AM INF reading from source database
11:37AM INF writing to target database [mode: full-refresh]
11:37AM INF streaming data
11:37AM INF dropped table public.activity_user
11:38AM INF created table public.activity_user
11:38AM INF inserted 77668 rows
11:38AM INF execution succeeded

¡Guau, eso fue fácil! Sling realizó todos los pasos que describimos anteriormente automáticamente. Incluso podemos exportar los datos de Snowflake a nuestro shell sdtout (en formato CSV) proporcionando solo el identificador de tabla (public.activity_user) para el indicador --src-stream y contar las líneas para validar nuestros datos:

$ sling run --src-conn SNOWFLAKE --src-stream public.activity_user --stdout | wc -l
11:39AM INF connecting to source database (snowflake)
11:39AM INF reading from source database
11:39AM INF writing to target stream (stdout)
11:39AM INF wrote 77668 rows
11:39AM INF execution succeeded
77669 # CSV output includes a header row (77668 + 1)

Uso de Sling Cloud

Ahora hagamos lo mismo con la aplicación Sling Cloud. Sling Cloud usa el mismo motor que Sling CLI, excepto que es una plataforma totalmente alojada para ejecutar todas sus necesidades de extracción y carga a un precio competitivo (consulte nuestra [página de precios] (https://slingdata.io/es/ precios)). Con Sling Cloud, podemos:

  • Colabora con muchos miembros del equipo

  • Administra múltiples espacios de trabajo/proyectos

  • Programar tareas de extracción-carga (EL) para que se ejecuten en un intervalo o tiempos fijos (CRON)

  • Recopilar y analizar registros para la depuración

  • Notificaciones de error por correo electrónico o Slack

  • Ejecutar desde regiones de todo el mundo o modo autohospedado si se desea (donde Sling Cloud es el orquestador).

  • Interfaz de usuario intuitiva (UI) para una configuración y ejecución rápidas

    Lo primero es registrarse para obtener una cuenta gratuita aquí. Una vez que haya iniciado sesión, podemos seleccionar Cloud Mode (más información sobre el modo Self-Hosted más adelante). Ahora podemos realizar pasos similares a los anteriores, pero usando la interfaz de usuario de Sling Cloud:

Agregar la conexión de BigQuery

Pasos con capturas de pantalla

Vaya a Connections, haga clic en New Connection, seleccione Big Query.

conexión-bigquery-paso-1

Ingrese el nombre BIGQUERY, sus credenciales y cargue el archivo JSON de su cuenta de Google. Haga clic en Test para probar la conectividad, luego Save.

conexión-bigquery-paso-2

Agregar la conexión de copo de nieve

Pasos con capturas de pantalla

Haga clic en New Connection, seleccione Snowflake.

conexión-copo-de-nieve-paso-1

Introduzca el nombre SNOWFLAKE y sus credenciales. Haga clic en Test para probar la conectividad, luego Save.

conexión-copo-de-nieve-paso-2

Crear replicación

Pasos con capturas de pantalla

Vaya a Replications, haga clic en New Replication, seleccione Big Query como origen y Snowflake como destino. Haga clic en Next.

replicación-conexión-paso-1

Ajuste a Target Object Name Pattern si lo desea y haga clic en Create.

replicación-conexión-paso-2

Crear y ejecutar tarea

Pasos con capturas de pantalla

Vaya a la pestaña Streams, haga clic en New SQL Stream ya que estamos usando un SQL personalizado como fuente de datos. Dale un nombre (activity_user). Pegue la consulta SQL, haga clic en Ok.

crear-tarea-paso-1

crear-tarea-paso-2

Ahora que tenemos una tarea de transmisión lista, podemos presionar el ícono Reproducir para activarla.

ejecutar-tarea-paso-1

Una vez que se completa la ejecución de la tarea, podemos inspeccionar los registros.

ejecutar-tarea-paso-2

Eso es! Tenemos nuestra configuración de tareas y podemos volver a ejecutarla a pedido o configurarla en un horario. Como puede notar, Sling Cloud maneja algunas cosas más por nosotros y brinda a los usuarios orientados a la interfaz de usuario una mejor experiencia en comparación con Sling CLI.

Conclusión

Estamos en una era en la que los datos son oro, y mover datos de una plataforma a otra no debería ser difícil. Como hemos demostrado, Sling ofrece una poderosa alternativa al reducir la fricción asociada con la integración de datos. Cubriremos cómo exportar desde Snowflake y cargar en BigQuery en otra publicación.

· 6 min de lectura
Fritz larco

fondo

Introducción a Sling CLI

Sling CLI es una herramienta de línea de comandos que permite el movimiento fácil y eficiente de datos (Extracción y carga) desde/hacia bases de datos, plataformas de almacenamiento y aplicaciones SaaS. Es trivial comenzar, simplemente puede ejecutar pip install sling si tiene instalado el pip de Python. O puede descargar el binario para su máquina aquí.

Credenciales de conexión

Para usar sling, primero debemos configurar las credenciales de conexión y Sling CLI las busca en varios lugares. Esto permite una naturaleza de "plug & play" si ya está utilizando otra herramienta como dbt, o tiene URL de conexión configuradas en variables de entorno. Sin embargo, se recomienda usar el archivo env.yaml de Sling, ya que permite una experiencia más consistente y flexible.

Archivo Sling Env

La primera vez que ejecuta el comando sling, la carpeta .sling se crea en el directorio de inicio del usuario actual (~/.sling), que a su vez contiene un archivo llamado env.yaml. La estructura del archivo Env de Sling es simple, coloca la credencial de sus conexiones debajo de la tecla connections como se muestra a continuación:

connections:
marketing_pg:
url: 'postgres://...'
ssh_tunnel: 'ssh://...' # optional

# o estilo de perfil dbt
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]

# variables globales, disponibles para todas las conexiones en tiempo de ejecución (opcional)
variables:
aws_access_key: '...'
aws_secret_key: '...'

Consulte aquí para conocer todos los tipos de conexión aceptados y sus respectivos puntos de datos necesarios.

Al usar el comando sling conns list con las credenciales de Sling Env, la columna SOURCE se mostrará como sling env yaml.

Variables de entorno

Si prefiere usar variables de entorno, basta con configurarlas en su entorno de shell de la forma habitual:

# 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'

# PowerShell de Windows
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'

Al usar el comando sling conns list con variables de entorno, la columna SOURCE se mostrará como env variable.

Perfiles DBT

dbt es otra herramienta popular que muchos profesionales de datos usan a diario, y admitir perfiles locales existentes permite un uso cruzado sencillo. La ubicación típica de las credenciales de dbt se encuentra en el archivo ~/dbt/profiles.yml. Consulte aquí para obtener más detalles.

Si tiene dbt credenciales y utiliza el comando sling conns list, la columna SOURCE se mostrará como dbt profiles yaml.

El subcomando conns

Ahora que ha configurado las credenciales, sling ofrece un subcomando conns para interactuar con las conexiones. Podemos realizar las siguientes operaciones: list, test y 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.

Listado de conexiones

Es conveniente ver y listar todas las conexiones disponibles en nuestro entorno. Simplemente podemos ejecutar el comando sling conns list. Aquí hay un ejemplo:

$ 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 |
+----------------------+------------------+-------------------+

Conexiones de prueba

La herramienta Sling CLI también permite probar conexiones. Una vez que conocemos el nombre de la conexión, podemos usar el 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.

He aquí un ejemplo real:

$ sling conns test MSSQL
6:42PM INF success!

Descubriendo flujos de conexión

Este es otro subcomando ingenioso que permite ver qué flujos de datos están disponibles para leer sling para una conexión en particular: el 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 conexiones de base de datos, mostrará una lista de las tablas y vistas disponibles. Para las conexiones de almacenamiento, enumerará los objetos de archivo no recursivos ubicados en la carpeta de origen especificada. Para conexiones SaaS/API, enumerará todos los objetos disponibles que existen para el consumo. A continuación se muestran algunos ejemplos.

Conexiones de base de datos

$ 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"
....

Si queremos filtrar por un shema específico, podemos hacer:

$ sling conns discover CLICKHOUSE --schema default
8:29PM INF Found 2 streams:
- "default"."docker_logs"
- "default"."sling_docker_logs"

Conexiones SaaS

$ sling conns discover NOTION
6:58PM INF Found 4 streams:
- blocks
- databases
- pages
- users

Conexiones de almacenamiento

$ 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

Si queremos ver los archivos en una subcarpeta, podemos hacer esto:

$ 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

Ejecutando tareas EL

Ahora que sus conexiones están configuradas, ¡está listo para ejecutar algunas tareas de extracción y carga! Cubrimos esto en detalle en una publicación separada, puede leer sobre esto [aquí] (https://docs.slingdata.io/sling-cli/running-tasks). Desde la línea de comandos, también puede ejecutar sling run -e, que imprimirá un montón de ejemplos.

Conclusión

Considerándolo todo, Sling CLI facilita la administración e interacción con varios tipos de conexiones desde su shell. Si tiene alguna pregunta o sugerencia, no dude en contactarnos [aquí] (https://slingdata.io/es/contact). Además, asegúrese de consultar Sling Cloud, que es un servicio en la nube que maneja sus diversas necesidades de extracción y carga a un modelo de precio competitivo.

· Lectura de un minuto
Fritz larco

fondo

Sling es una herramienta de integración de datos moderna y potente que extrae y carga datos de fuentes de datos populares a destinos con alto rendimiento y facilidad.

¿Por qué Sling?

  • Rendimiento ultrarrápido: el motor central está escrito en Go y adopta un diseño de transmisión, lo que lo hace súper eficiente al mantener un mínimo de datos en la memoria.
  • Replicar datos rápidamente: replica fácilmente datos desde una base de datos de origen, archivo o conexión SaaS a una base de datos o archivo de destino.
  • Transparente y de bajo costo - Sling opera con un modelo eficiente y de bajo costo. Nuestro objetivo es ser transparentes con el costo de usar nuestra plataforma.

Obtenga más información sobre cómo funciona Sling Regístrate en Sling