spark_catalog, et les tables sont identifiées par {catalog name}.{database}.{table}. Grâce à cette nouvelle
fonctionnalité de catalogue, il est désormais possible d’ajouter et d’utiliser plusieurs catalogues dans une même application Spark.
Choisir entre la Catalog API et la TableProvider API
Catalog API vs TableProvider API
Prérequis
- Java 8 ou 17 (Java 17 ou version ultérieure requis pour Spark 4.0)
- Scala 2.12 ou 2.13 (Spark 4.0 prend uniquement en charge Scala 2.13)
- Apache Spark 3.3, 3.4, 3.5 ou 4.0
Matrice de compatibilité
Installation et configuration
pom.xml
pour Maven ou build.sbt pour SBT).
Vous pouvez également placer les fichiers JAR nécessaires dans votre dossier $SPARK_HOME/jars/, ou les spécifier directement via une
option Spark à l’aide du flag --jars dans la commande spark-submit.
Les deux approches garantissent que le connecteur ClickHouse est disponible dans votre environnement Spark.
Importer comme dépendance
- Maven
- Gradle
- SBT
- Spark SQL/Shell CLI
Télécharger la bibliothèque
Enregistrer le catalogue (obligatoire)
Ces paramètres peuvent être définis de l’une des façons suivantes :
- Modifier ou créer
spark-defaults.conf. - Transmettre la configuration à votre commande
spark-submit(ou à vos commandes CLIspark-shell/spark-sql). - Ajouter la configuration lors de l’initialisation de votre contexte.
Utilisation de la TableProvider API (accès basé sur le format)
Exemple de lecture via l’API format
- Python
- Scala
- Java
Exemple d’écriture via l’API format
- Python
- Scala
- Java
Fonctionnalités de TableProvider
Création automatique de table
- Engine : utilise
MergeTree()par défaut s’il n’est pas spécifié. Vous pouvez définir un autre moteur à l’aide de l’optionengine(par exemple,ReplacingMergeTree(),SummingMergeTree(), etc.) - ORDER BY : obligatoire — vous devez spécifier explicitement l’option
order_bylors de la création d’une nouvelle table. Le connecteur vérifie que toutes les colonnes indiquées existent dans le schéma. - Prise en charge des clés Nullable : ajoute automatiquement
settings.allow_nullable_key=1si ORDER BY contient des colonnes Nullable
- Python
- Scala
- Java
Options de connexion de TableProvider
Options de connexion
Options de création de table
- L’option
order_byest obligatoire lors de la création d’une nouvelle table. Toutes les colonnes indiquées doivent exister dans le schéma. ** Défini automatiquement sur1si ORDER BY contient des colonnes Nullable et que cette option n’est pas explicitement fournie.
Modes d’écriture
append: Ajouter des données à une table existanteoverwrite: Remplacer toutes les données de la table (tronque la table)
- Python
- Scala
- Java
Configuration des options ClickHouse
allow_nullable_key, index_granularity et d’autres paramètres au niveau de la table ou de la requête. Elles se distinguent des options du connecteur (comme host, database, table), qui déterminent la façon dont le connecteur se connecte à ClickHouse.
Utilisation de TableProvider API
settings.<key> :
- Python
- Scala
- Java
Utilisation de Catalog API
spark.sql.catalog.<catalog_name>.option.<key> dans votre configuration Spark :
Paramètres de ClickHouse Cloud
Lire les données
- Java
- Scala
- Python
- Spark SQL
Écrire des données
- Java
- Scala
- Python
- Spark SQL
Opérations DDL
Lors de l’utilisation de Spark SQL, une seule instruction peut être exécutée à la fois.
Travailler avec VariantType
La prise en charge de VariantType est disponible avec Spark 4.0+ et nécessite ClickHouse 25.3+ avec les types JSON/Variant expérimentaux activés.
VariantType de Spark pour manipuler des données semi-structurées. VariantType correspond aux types JSON et Variant de ClickHouse, ce qui vous permet de stocker et d’interroger efficacement des données à schéma souple.
Cette section porte spécifiquement sur la correspondance et l’utilisation de VariantType. Pour un aperçu complet de tous les types de données pris en charge, consultez la section Types de données pris en charge.
Correspondance des types ClickHouse
Lecture des données VariantType
JSON et Variant sont automatiquement converties en VariantType de Spark :
- Scala
- Python
- Java
Écrire des données de type VariantType
- Scala
- Python
- Java
Créer des tables VariantType avec Spark SQL
Configuration des types de Variant
VariantType, vous pouvez spécifier les types ClickHouse à utiliser :
Type JSON (par défaut)
variant_types n’est spécifiée, la colonne utilise par défaut le type JSON de ClickHouse, qui n’accepte que les objets JSON :
Type Variant avec plusieurs types
variant_types :
Types pris en charge dans Variant
Variant() :
- Primitives :
String,Int8,Int16,Int32,Int64,UInt8,UInt16,UInt32,UInt64,Float32,Float64,Bool - Tableaux :
Array(T), où T est n’importe quel type pris en charge, y compris des tableaux imbriqués - JSON :
JSONpour stocker des objets JSON
Configuration du format de lecture
VariantType. Vous pouvez modifier ce comportement pour les lire comme des chaînes :
- Scala
- Python
- Java
Prise en charge des formats d’écriture
Configurez le format d’écriture :
Bonnes pratiques
- Utilisez le type JSON pour les données exclusivement JSON : si vous stockez uniquement des objets JSON, utilisez le type JSON par défaut (sans la propriété
variant_types) - Spécifiez explicitement les types : lorsque vous utilisez
Variant(), listez explicitement tous les types que vous prévoyez de stocker - Activez les fonctionnalités expérimentales : assurez-vous que ClickHouse a bien
allow_experimental_json_type = 1activé - Utilisez le format JSON pour les écritures : le format JSON est recommandé pour les données de type VariantType afin d’assurer une meilleure compatibilité
- Tenez compte des schémas de requêtes : les types JSON/Variant prennent en charge les requêtes JSON path de ClickHouse pour un filtrage efficace
- Indications de colonne pour les performances : lorsque vous utilisez des champs JSON dans ClickHouse, l’ajout d’indications de colonne améliore les performances des requêtes. Actuellement, l’ajout d’indications de colonne via Spark n’est pas pris en charge. Consultez l’issue GitHub #497 pour suivre cette fonctionnalité.
Exemple : workflow complet
- Scala
- Python
- Java
Configurations
Utilisation des configurations : il s’agit d’options de configuration au niveau de Spark qui s’appliquent à la fois à API Catalog et à TableProvider API. Elles peuvent être définies de deux manières :
-
Configuration Spark globale (s’applique à toutes les opérations) :
-
Surcharge par opération (TableProvider API uniquement - peut remplacer les paramètres globaux) :
spark-defaults.conf ou lors de la création de la session Spark.