Insertion de données avec ClickHouse Connect : utilisation avancée
InsertContexts
insert et insert_df, dans un InsertContext. Les méthodes insert_arrow, insert_df_arrow et raw_insert envoient directement leurs payloads et n’en utilisent pas. L’InsertContext inclut toutes les valeurs transmises comme arguments à la méthode client insert. De plus, lors de la création initiale d’un InsertContext, ClickHouse Connect récupère les types de données des colonnes à insérer, nécessaires à des insertions efficaces au format Native. En réutilisant l’InsertContext pour plusieurs insertions, cette « pré-requête » est évitée, ce qui rend les insertions plus rapides et plus efficaces.
Il est possible d’obtenir un InsertContext à l’aide de la méthode client create_insert_context. Cette méthode prend les mêmes arguments que la fonction insert, à l’exception de context lui-même. Notez que seule la propriété data des InsertContext doit être modifiée en vue d’une réutilisation. Cela correspond à son objectif : fournir un objet réutilisable pour des insertions répétées de nouvelles données dans la même table.
InsertContexts incluent un état mutable mis à jour pendant le processus d’insertion ; ils ne sont donc pas thread-safe.
Formats d’écriture
DateTime est un entier, le client la traite comme un nombre de secondes depuis l’époque Unix.
Il n’est généralement pas nécessaire de remplacer un format d’écriture, mais les méthodes de clickhouse_connect.datatypes.format permettent d’en définir un globalement. Les wrappers de conteneur tels que Array, Nullable et LowCardinality conservent le comportement de mise en forme du type d’élément.
Options de format d’écriture
Méthodes d’insertion spécialisées
insert_df— Insère un Pandas DataFrame comme données Native orientées colonnes. Il prend également en charge des noms/types de colonnes explicites ou unInsertContextréutilisable.insert_arrow— Insère une PyArrow Table à l’aide du format d’entrée Arrow de ClickHouse.insert_df_arrow— Insère un Pandas DataFrame adossé à Arrow ou un Polars DataFrame. Les colonnes Pandas doivent toutes utiliser des Dtype adossés à Arrow.
database, settings et les transport_settings HTTP par requête.
Un tableau NumPy est une Sequence of Sequences valide et peut être utilisé comme argument
data avec la méthode insert principale ; une méthode spécialisée n’est donc pas nécessaire.Insertion de DataFrame Pandas
Insertion d’une table PyArrow
Insertion d’un DataFrame adossé à Arrow (pandas 2.x)
Créer une table à partir d’un schéma PyArrow
create_table_from_arrow_schema génère une instruction CREATE TABLE à partir de champs scalaires Arrow courants. La correspondance couvre les entiers signés et non signés, les valeurs à virgule flottante, les booléens, les chaînes, les dates et les horodatages. Elle crée intentionnellement des colonnes ClickHouse non Nullable et lève une exception TypeError pour les types Arrow non pris en charge. Passez en revue le DDL généré avant de l’exécuter.
Fuseaux horaires
datetime dans des colonnes DateTime ou DateTime64, ClickHouse Connect les convertit en valeurs d’époque Unix.
Objets datetime avec informations de fuseau horaire
ClickHouse Connect utilise le module
zoneinfo de la bibliothèque standard. Le driver ne dépend plus de pytz.Objets datetime sans fuseau horaire
naive_datetime_insert contrôle l’insertion d’objets Python natifs contenant des valeurs datetime sans fuseau horaire. Il s’applique également aux chaînes ISO sans fuseau horaire acceptées par les colonnes DateTime64.
"local"est la valeur par défaut dans la version 1.x. Python interprète la valeur dans le fuseau horaire du processus lors de l’appel à.timestamp(). Cela préserve le comportement existant."server"interprète la valeur comme une heure locale dans le fuseau horaire déclaré par la colonneDateTimeouDateTime64. Si la colonne n’a pas de fuseau horaire, le fuseau horaire du serveur communiqué lors de la connexion du client est utilisé.
datetime ou des chaînes ISO DateTime64 ; la modification s’applique donc aux clients existants et aux contextes d’insertion réutilisables.
"server", ClickHouse Connect associe le tzinfo cible avant de convertir la valeur en époque Unix. Pour les fuseaux horaires IANA, il suit les règles de la bibliothèque standard pour les transitions vers ou depuis l’heure d’été. En cas de chevauchement à l’automne, la valeur fold du datetime est utilisée. Par défaut, fold=0 sélectionne le décalage avant la transition, tandis que fold=1 sélectionne celui après la transition. En cas de lacune au printemps, la même sélection de décalage est utilisée, sans rejet ni normalisation.
Les heures locales inexistantes lors d’une lacune printanière peuvent ne pas effectuer d’aller-retour via un paramètre de requête en mode wall, car l’analyse de texte de ClickHouse peut sélectionner un décalage différent. Utilisez un datetime avec fuseau horaire ou une heure locale valide lorsque l’instant est important.
L’option s’applique uniquement aux insertions natives d’objets Python datetime et aux chaînes ISO sans fuseau horaire acceptées par DateTime64. Les colonnes NumPy et Pandas de type datetime64 sans fuseau horaire conservent leur conversion existante des heures locales UTC.
Pour représenter un instant précis indépendamment de l’un ou l’autre mode, associez le fuseau horaire souhaité ou fournissez explicitement un entier époque Unix.
datetime sans fuseau horaire utilisent le paramètre distinct naive_datetime_binding. Son mode par défaut, "wall", envoie les champs tels quels, sans conversion vers le fuseau horaire local de l’hôte. Consultez la section Argument Parameters.
Colonnes DateTime avec métadonnées de fuseau horaire
DateTime('America/Denver') ou DateTime64(3, 'Asia/Tokyo'). Ces métadonnées déterminent la manière dont les valeurs sont affichées lors de l’exécution d’une requête.
Lors de l’insertion d’une valeur avec fuseau horaire, ClickHouse Connect préserve l’instant représenté. Pour une valeur sans fuseau horaire, le paramètre naive_datetime_insert détermine si le fuseau horaire du processus ou celui de la colonne est utilisé. Lors d’une requête, le résultat utilise le fuseau horaire de la colonne, sauf si une substitution par colonne est fournie via l’argument column_tzs. L’argument query_tz ne remplace pas le fuseau horaire déclaré pour une colonne.
Insertions de fichiers
clickhouse_connect.driver.tools.insert_file transmet en flux un fichier local vers une table existante et confie l’analyse à ClickHouse.
Les paramètres du format d’entrée, tels que
input_format_allow_errors_ratio et input_format_allow_errors_num, peuvent être transmis via settings.
AsyncClient, utilisez await avec insert_file_async en passant les mêmes arguments :
raw_insert, de sorte que le contenu du fichier reste en mémoire.