
dask-sql
est un moteur de requête SQL distribué en Python.
Il vous permet d'interroger et de transformer vos données en utilisant un mélange de
les opérations SQL courantes et le code Python et également augmenter le calcul facilement
si tu en as besoin.
- Combinez la puissance de Python et SQL : chargez vos données avec Python, transformez-les avec SQL, améliorez-les avec Python et interrogez-les avec SQL - ou l'inverse.
Avecdask-sql
vous pouvez mélanger l'API de dataframe Python bien connue depandas
etDask
avec des opérations SQL courantes, pour
traiter vos données exactement de la manière qui vous convient le mieux. - Infinite Scaling : en utilisant la puissance du grand écosystème « Dask », vos calculs peuvent évoluer selon vos besoins - de votre ordinateur portable à votre super cluster - sans modifier aucune ligne de code SQL. Des k8s aux déploiements cloud, des systèmes batch à YARN - si
Dask
[le prend en charge] (https://docs.dask.org/en/latest/setup.html),dask-sql
le sera aussi. - Vos données - vos requêtes : utilisez des fonctions définies par l'utilisateur (UDF) Python dans SQL sans aucun inconvénient de performance et étendez vos requêtes SQL avec le grand nombre de bibliothèques Python, par exemple l'apprentissage automatique, différents formats d'entrée compliqués, des statistiques complexes .
- Facile à installer et à entretenir :
dask-sql
n'est qu'une installation pip/conda (ou un docker exécuté si vous préférez). Pas besoin de configurations de cluster compliquées -dask-sql
s'exécutera immédiatement sur votre machine et peut être facilement connecté à votre cluster informatique. - Utilisez SQL où vous voulez :
dask-sql
s'intègre à votre bloc-notes jupyter, à votre module Python normal ou peut être utilisé comme serveur SQL autonome à partir de n'importe quel outil de BI. Il s'intègre même nativement avec Apache Hue.
En savoir plus dans la documentation.

Exemple
Pour cet exemple, nous utilisons des données chargées à partir du disque et les interrogeons avec une commande SQL à partir de notre code python.
N'importe quel cadre de données pandas ou dask peut être utilisé en entrée et dask-sql
comprend une grande quantité de formats (csv, parquet, json,...) et d'emplacements (s3, hdfs, gcs,...).
import dask.dataframe as dd
from dask_sql import Context
# Create a context to hold the registered tables
c = Context()
# Load the data and register it in the context
# This will give the table a name, that we can use in queries
df = dd.read_csv("...")
c.create_table("my_data", df)
# Now execute a SQL query. The result is again dask dataframe.
result = c.sql("""
SELECT
my_data.name,
SUM(my_data.x)
FROM
my_data
GROUP BY
my_data.name
""", return_futures=False)
# Show the result
print(result)
Démarrage rapide
Consultez la documentation ou démarrez l'exemple de cahier sur [binder](https://mybinder.org/v2/gh/nils- braun/dask-sql-binder/main?urlpath=lab).
dask-sql
est actuellement en cours de développement et ne comprend pas pour l'instant toutes les commandes SQL (mais une grande partie).
Nous recherchons activement des retours, des améliorations et des contributeurs !
Si vous souhaitez utiliser des GPU pour vos requêtes SQL, jetez un œil au projet blazingSQL.
Installation
dask-sql
peut être installé via conda
(préféré) ou pip
- ou dans un environnement de développement.
Avec conda
Créez un nouvel environnement conda ou utilisez votre environnement déjà présent :
conda create -n dask-sql
conda activate dask-sql
Installez le paquet depuis le canal conda-forge
:
conda install dask-sql -c conda-forge
Avec pip
dask-sql
a besoin de Java pour l'analyse des requêtes SQL.
Assurez-vous d'avoir une installation Java en cours d'exécution avec la version >= 8.
Pour tester si Java est correctement installé et configuré, exécutez
$ java -version
version openjdk "1.8.0_152-release"
Environnement d'exécution OpenJDK (build 1.8.0_152-release-1056-b12)
VM serveur OpenJDK 64 bits (build 25.152-b12, mode mixte)
Après avoir installé Java, vous pouvez installer le package avec
pip install dask-sql
Pour le developpement
Si vous voulez avoir la version la plus récente (non publiée) de dask-sql
ou si vous prévoyez de faire du développement sur dask-sql
, vous pouvez également installer le paquet à partir des sources.
git clone https://github.com/nils-braun/dask-sql.git
Créez un nouvel environnement conda et installez l'environnement de développement :
conda create -n dask-sql --file conda.txt -c conda-forge
Il n'est pas recommandé d'utiliser pip
au lieu de conda
pour la configuration de l'environnement.
Si toutefois vous en avez besoin, assurez-vous que Java (jdk >= 8) et maven sont installés et correctement configurés avant de continuer.
Jetez un œil à conda.txt
pour le reste de l'environnement de développement.
Après cela, vous pouvez installer le package en mode développement
pip install -e ".[dev]"
Pour compiler les classes Java (au début ou après les modifications), exécutez
python setup.py java
Ce référentiel utilise des hooks pre-commit. Pour les installer, appelez
pré-commit installer
Tester
Vous pouvez lancer les tests (après installation) avec
tests pytest
Serveur SQL
dask-sql
est livré avec une petite implémentation de test pour un serveur SQL.
Au lieu de reconstruire un pilote ODBC complet, nous réutilisons le [protocole presto wire] (https://github.com/prestodb/presto/wiki/HTTP-Protocol).
Il ne s'agit - jusqu'à présent - que d'un début de développement et il manque des concepts importants, tels que
authentification.
Vous pouvez tester le serveur sql presto en exécutant (après l'installation)
serveur-dask-sql
ou en utilisant l'image docker créée
docker run --rm -it -p 8080:8080 nbraun/dask-sql
dans un seul terminal. Cela fera tourner un serveur sur le port 8080 (par défaut)
qui ressemble à une base de données presto normale pour n'importe quel client presto.
Vous pouvez tester cela par exemple avec le [client presto] par défaut (https://prestosql.io/docs/current/installation/cli.html) :
presto --server localhost:8080
Vous pouvez maintenant lancer des requêtes SQL simples (car aucune donnée n'est chargée par défaut) :
=> SÉLECTIONNER 1 + 1 ;
EXPR$0
--------
2
(1 rangée)
Vous pouvez trouver plus d'informations dans la documentation.
CLI
Vous pouvez également exécuter la CLI dask-sql
pour tester rapidement les commandes SQL :
dask-sql --load-test-data --startup
(dask-sql) > SELECT * FROM timeseries LIMIT 10;
Comment ça marche?
À la base, dask-sql
fait deux choses :
- traduire la requête SQL en utilisant Apache Calcite en une algèbre relationnelle, qui est spécifiée comme un arbre d'objets java - similaire à de nombreux autres moteurs SQL (Hive, Flink, .. .)
- convertir cette description de la requête des objets java en appels API dask (et les exécuter) - renvoyer une trame de données dask.
Pour la première étape, Apache Calcite doit connaître les colonnes et les types de trames de données dask, donc certaines classes Java pour stocker ces informations pour les trames de données dask sont définies dans planner
.
Une fois la traduction en algèbre relationnelle terminée (à l'aide de RelationalAlgebraGenerator.getRelationalAlgebra
), les méthodes python définies dans dask_sql.physical
la transforment en un plan d'exécution physique en convertissant chaque élément de l'algèbre relationnelle un par un.