
et l'implémentation du type de données Decimal256 en C++ et Java
Apache Arrow est une plateforme de développement pour l'analyse en mémoire. Elle contient un ensemble de technologies qui permettent aux grands systèmes de données de traiter et de déplacer rapidement les données. Apache Arrow propose un format de données en mémoire multilangage, multiplateforme et en colonnes pour les données. Il élimine le besoin de sérialisation, car les données sont représentées par les mêmes octets sur chaque plateforme et langage de programmation. Ce format commun permet le transfert de données sans copie dans les systèmes Big Data, afin de minimiser les performances du transfert de données.
Base de données en mémoire et caractéristiques d'Apache Arrow
Une base de données dite « en mémoire » (in-memory), ou IMDB (In Memory DataBase), ou encore MMDB (Main Memory DB), désigne une base de données dont les informations sont stockées en mémoire centrale afin d'accélérer les temps de réponse. Une IMDB constitue un type de base de données analytique, un système qui stocke des données historiques portant sur des mesures destinées à des applications BI/BA (Business Intelligence/Business Analytics), généralement dans le cadre d'un entrepôt ou d'un magasin de données.
Ces systèmes permettent aux utilisateurs d'exécuter des requêtes et de générer des rapports sur les informations renfermées. Celles-ci sont régulièrement mises à jour pour intégrer les données transactionnelles récentes issues des systèmes opérationnels d'une entreprise. Outre le fait qu'elle permet des temps de réponse extrêmement courts, l'analytique en mémoire vive réduit, voire élimine, le recours à l'indexation des données et au stockage de données préagrégées dans des tables d'agrégats ou des cubes OLAP. Cette capacité diminue les coûts informatiques et accélère la mise en œuvre d'applications BI/BA.
Comme souligné plus haut, Apache Arrow contient un ensemble de technologies qui permettent aux systèmes Big Data de traiter et de déplacer rapidement les données. Il spécifie un format de mémoire en colonnes standardisé indépendant du langage pour les données plates et hiérarchiques, organisé pour des opérations analytiques efficaces sur du matériel moderne. Apache Arrow propose un format de stockage commun sans frais généraux pour de nombreux systèmes Big Data et voudrait devenir un nouveau standard pour le traitement des données en mémoire orienté colonnes.
Le projet a été soutenu dès le départ par de nombreux projets Big Data tels que Cassandra, Drill, HBase, Spark et Storm répertoriés sur Apache (notons que des projets en dehors d'Apache tel que Pandas ont également soutenu son développement). Apache Arrow 3.0.0 vient d'être publiée avec de nombreuses nouvelles fonctionnalités pour la base de données. Celle-ci couvre plus de 3 mois de travail de développement et comprend 666 problèmes résolus provenant de 106 contributeurs distincts. Voici ci-dessous un aperçu de ce dont il s'agit dans cette version.
Arrow Columnar Format
Arrow Columnar Format est un composant d'Apache Arrow et constitue une représentation en mémoire standard et efficace de divers types de données, simples ou imbriquées. En d'autres termes, il comprend une spécification de la structure des données en mémoire, la sérialisation des métadonnées, et un protocole de sérialisation et de transport des données génériques. Il offre des garanties de performance analytique et de localisation des données en échange d'opérations de mutation comparativement plus coûteuses.
Avec la sortie d'Apache Arrow 3, le type de données Decimal256, qui était déjà pris en charge par la spécification du format en colonnes Arrow, est maintenant implémenté en C++ et Java.
Arrow Flight
Un service "flight" est un point d'extrémité permettant de récupérer ou de stocker des données Arrow. Il peut exposer un ou plusieurs points d'extrémité prédéfinis auxquels on peut accéder à l'aide du protocole Arrow Flight. De plus, service "flight" peut exposer un ensemble d'actions qui sont disponibles. Dans Apache Arrow 3, l'authentification en C++/Java/Python a été révisée, permettant des méthodes d'authentification plus souples et l'utilisation d'en-têtes standard. La prise en charge des cookies a également été ajoutée.
Les implémentations C++/Java sont désormais plus permissives lors de l'analyse des messages afin de mieux interagir avec les autres implémentations de Flight. Une implémentation de Flight de base pour C#/.NET a été ajoutée.
La bibliothèque C++
- la réserve de mémoire par défaut peut maintenant être modifiée à l'exécution en utilisant la variable d'environnement "ARROW_DEFAULT_MEMORY_POOL". La variable d'environnement est inspectée au démarrage du processus. Ceci est utile pour essayer de diagnostiquer les problèmes de consommation de mémoire avec Arrow ;
- des itérateurs de type STL sont maintenant fournis sur des tableaux concrets. Ils sont utiles pour les tâches critiques non performantes, par exemple les tests ;
- il est maintenant possible de concaténer des tableaux de dictionnaires avec des dictionnaires inégaux. Les dictionnaires sont unifiés lors de la concaténation, pour les types de données pris en charge ;
- les threads d'un pool de threads sont désormais générés paresseusement selon les besoins pour les tâches en attente, jusqu'à la capacité configurée. Ils étaient auparavant générés dès la création du pool de threads.
La couche de calcul
À titre de rappel, dans Apache Arrow, les fonctions représentent des opérations de calcul sur des entrées de types éventuellement différents. En interne, une fonction est mise en œuvre par un ou plusieurs "noyaux", selon les types d'entrées concrets (par exemple, une fonction ajoutant des valeurs à partir de deux entrées peut avoir des noyaux différents selon que les entrées sont intégrales ou à virgule flottante). Dans Apache Arrow 3, les changements à ce niveau incluent :
- les fonctions sont stockées dans un registre global des fonctions où elles peuvent être recherchées par leur nom ;
- des fonctions de calcul pour le traitement des chaînes de caractères ont été ajoutées : d'une part le fractionnement sur les espaces (saveurs ASCII et Unicode) et le fractionnement sur un motif et d'autre part, le découpage des caractères ;
- le comportement des fonctions de calcul "index_in" et "is_in" avec des zéros a été modifié pour des raisons de cohérence ;
- des noyaux de tri à colonnes multiples sont désormais disponibles pour les tableaux et les lots d'enregistrement ;
- les performances du filtrage des tables ont été considérablement améliorées ;
- des arguments scalaires sont maintenant acceptés pour un plus grand nombre de fonctions de calcul ;
- les fonctions de calcul "quantile" et "is_nan" ont été ajoutées pour les données numériques ;
- les fonctions d'agrégation "any" et "all" ont été ajoutées pour les données booléennes.
Les ensembles de données
- la hiérarchie des expressions s'est simplifiée pour devenir une enveloppe autour de littéraux, de références de champs ou d'appels à des fonctions nommées. Cela permet d'utiliser n'importe quelle fonction de calcul tout en filtrant sans passer par la case départ ;
- les statistiques de parquet sont analysées paresseusement dans "ParquetDatasetFactory" et "ParquetFileFragment" pour un temps de construction plus court.
CSV
- la conversion des colonnes de chaînes est désormais plus rapide grâce à une validation UTF-8 plus rapide des petites chaînes ;
- la conversion des colonnes à virgule flottante est maintenant plus rapide grâce à des routines de conversion optimisées de chaînes de caractères en doubles ;
- l'analyse des horodatages ISO8601 est maintenant plus libérale : les zéros de fin peuvent être omis dans la partie fractionnaire ;
- Correction d'un bug où la détection de zéros pouvait donner de mauvais résultats sur certaines plateformes ;
- ajout d'une inférence de type pour les colonnes Date32 pour les valeurs sous la forme AAAA-MM-JJ.
Feather
- correction de la lecture des fichiers Feather compressés écrits avec Arrow 0.17
Filesystem layer
- les parcours récursifs des arbres S3 bénéficient désormais d'une implémentation parallèle, où les lectures de plusieurs annuaires enfants sont désormais émises simultanément ;
- amélioration de la détection des répertoires vides afin de tenir compte des différences entre les implémentations Amazon et Minio S3.
Flight RPC
- les adresses d'hôtes IPv6 sont désormais prises en charge.
IPC
- il est maintenant possible d'émettre des deltas de dictionnaire lorsque cela est possible en utilisant le rédacteur de flux de la CIB. Ceci est régi par une nouvelle variable dans la classe IpcWriteOptions ;
- il est maintenant possible de lire des tables plus larges, qui auparavant échouaient parce qu'elles atteignaient une limite lors de la vérification des Flatbuffers.
Parquet
- correction de la lecture des colonnes de Parquet comprimées LZ4 émises par l'implémentation Java Parquet ;
- correction d'un bogue où l'écriture de plusieurs lots de chaînes imbriquées annulables dans Parquet ne permettait pas d'écrire des données en lots après le premier ;
- le type de données Decimal256 peut être lu et écrit dans Parquet ;
- les données LargeString et LargeBinary peuvent maintenant être écrites dans Parquet.
C#
- le paquet .NET a ajouté un support initial pour les clients et serveurs Arrow Flight. Cette prise en charge est assurée par deux nouveaux paquets NuGet : Apache.Arrow.Flight (client) et Apache.Arrow.Flight.AspNetCore (serveur) ;
- correction d'un problème où ArrowStreamWriter n'écrivait pas les métadonnées de schéma sur les flux Arrow.
Julia
- Apache Arrow 3 est la première version à inclure officiellement une implémentation pour le langage Julia. L'implémentation de Julia pure inclut le support d'une large couverture de la spécification du format.
Python
- le support pour Python 3.9 a été ajouté, et le support pour Python 3.5 a été supprimé ;
- le support pour la construction de paquets manylinux1 a été supprimé. PyArrow continue à être disponible sous forme de roues manylinux2010 et manylinux2014 ;
- la version minimale requise pour NumPy est maintenant la 1.16.6. Notez que lors de la mise à jour de NumPy vers la version 1.20, vous devez également mettre à jour PyArrow vers la version 3.0.0 pour assurer la compatibilité, car cette version de PyArrow corrige un problème de compatibilité avec NumPy 1.20 ;
- les fonctions de calcul sont maintenant automatiquement exportées du C++ vers le module de calcul pyarrow.com, et elles ont des chaînes de caractères correspondant à leur définition C++ ;
- une méthode iter_batches() est maintenant disponible pour la lecture itérative d'un fichier Parquet ;
- d'autres pools de mémoire (tels que mimalloc, jemalloc ou le pool de mémoire basé sur C malloc) sont maintenant disponibles en Python ;
- correction d'un blocage potentiel lors de l'importation de pandas à partir de plusieurs threads.
R
- cette version contient de nouvelles fonctionnalités pour l'habillage Flight RPC, une meilleure prise en charge de la sauvegarde des métadonnées R (y compris les données spatiales sf) dans les fichiers Feather et Parquet, plusieurs améliorations significatives de la vitesse et de la gestion de la mémoire, et de nombreuses autres améliorations.
Ruby
- dans le binding Ruby, le support de Decimal256 et de Arrow::FixedBinaryArrayBuilder sont ajoutés ainsi que C GLib.
C GLib
Dans Apache Arrow 3, C GLib se compose de nombreuses nouvelles fonctionnalités, dont :
[LIST][*]un tableau en morceaux, un lot[/*]...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.