MATERIALIZED VIEW est associée au moteur, le moteur de table S3Queue commence à collecter les données en arrière-plan.
Créer une table
S3Queue sont les mêmes que ceux du moteur de table S3. Voir la section des paramètres ici.
Exemple
Paramètres
system.s3_queue_settings. Disponible depuis la version 24.10.
Noms des paramètres (24.7+)À partir de la version 24.7, les paramètres S3Queue peuvent être spécifiés avec ou sans le préfixe
s3queue_ :- Syntaxe moderne (24.7+) :
processing_threads_num,tracked_file_ttl_sec, etc. - Syntaxe héritée (toutes les versions) :
s3queue_processing_threads_num,s3queue_tracked_file_ttl_sec, etc.
Mode
- unordered — En mode unordered, l’ensemble des fichiers déjà traités est suivi au moyen de nœuds persistants dans ZooKeeper.
- ordered — En mode ordered, les fichiers sont traités dans l’ordre lexicographique. Cela signifie que si un fichier nommé ‘BBB’ a été traité à un moment donné et qu’un fichier nommé ‘AA’ est ensuite ajouté au bucket, il sera ignoré. Seuls le nom maximal (au sens lexicographique) du fichier traité avec succès, ainsi que les noms des fichiers qui feront l’objet d’une nouvelle tentative après un échec de chargement, sont stockés dans ZooKeeper.
ordered dans les versions antérieures à 24.6. À partir de la version 24.6, il n’y a plus de valeur par défaut ; le paramètre doit être spécifié manuellement. Pour les tables créées avec des versions antérieures, la valeur par défaut restera Ordered pour des raisons de compatibilité.
after_processing
- keep.
- delete.
- move.
- tag.
keep.
move nécessite des paramètres supplémentaires. Dans le cas d’un déplacement dans le même bucket, un nouveau préfixe de chemin doit être fourni via after_processing_move_prefix.
Le déplacement vers un autre bucket S3 nécessite l’URI du bucket cible via after_processing_move_uri, ainsi que les informations d’identification S3 via after_processing_move_access_key_id et after_processing_move_secret_access_key.
Exemple :
after_processing_move_connection_string et le nom du conteneur dans after_processing_move_container. Voir les paramètres d’AzureQueue.
L’ajout de tags nécessite une clé de tag et une valeur de tag, fournies respectivement dans after_processing_tag_key et after_processing_tag_value.
after_processing_retries
- Entier non négatif.
10.
after_processing_move_access_key_id
- String.
after_processing_move_prefix
- String.
after_processing_move_preserve_path
true, le chemin complet de l’objet source est ajouté à after_processing_move_prefix lors du déplacement d’un fichier traité avec succès, de sorte que la structure des répertoires source sous le bucket soit préservée à la destination. Si false, seul le nom du fichier est utilisé et la structure des répertoires source est aplatie.
Valeurs possibles :
true/false.
false.
after_processing_move_secret_access_key
- String.
after_processing_move_uri
- String.
after_processing_tag_key
after_processing='tag'.
Valeurs possibles :
- String.
after_processing_tag_value
after_processing='tag'.
Valeurs possibles :
- String.
keeper_path
s3queue_default_zookeeper_path, de l’UUID de la base de données et de l’UUID de la table. Les valeurs absolues (commençant par /) sont utilisées telles quelles, tandis que les valeurs relatives sont ajoutées au préfixe configuré. Les macros telles que {database} ou {uuid} sont développées avant que le moteur ne se connecte à ZooKeeper.
Pour cibler un cluster ZooKeeper auxiliaire, faites précéder la valeur du nom configuré, par exemple analytics_keeper:/clickhouse/queue/orders. Le nom doit exister dans <auxiliary_zookeepers> ; sinon, le moteur signale Unknown auxiliary ZooKeeper name .... La chaîne complète (y compris le préfixe) est conservée dans SHOW CREATE TABLE afin que l’instruction puisse être répliquée telle quelle.
Valeurs possibles :
- String.
/.
loading_retries
- Entier non négatif.
10.
processing_threads_num
Unordered.
Valeur par défaut : nombre de CPU ou 16.
parallel_inserts
processing_threads_num produit un seul INSERT : il ne fera donc que télécharger les fichiers et les analyser sur plusieurs threads.
Mais cela limite le parallélisme. Pour un meilleur débit, utilisez parallel_inserts=true ; cela permettra d’insérer les données en parallèle (gardez toutefois à l’esprit que cela générera un plus grand nombre de data parts pour la famille MergeTree).
Les
INSERT seront lancés en fonction des paramètres max_process*_before_commit.false.
enable_logging_to_queue_log
system.s3queue_log.
Valeur par défaut : 1.
polling_min_timeout_ms
- Entier positif.
1000.
polling_max_timeout_ms
- Entier positif.
600000.
polling_backoff_ms
- Entier positif.
30000.
tracked_files_limit
- Entier positif.
1000.
tracked_file_ttl_sec
- Entier positif.
0.
cleanup_interval_min_ms
60000.
cleanup_interval_max_ms
60000.
buckets
24.6. S’il existe plusieurs répliques de la table S3Queue, utilisant toutes le même répertoire de métadonnées dans Keeper, la valeur de buckets doit être au moins égale au nombre de répliques. Si le paramètre processing_threads est également utilisé, il est pertinent d’augmenter davantage la valeur du paramètre buckets, car elle détermine le parallélisme réel du traitement de S3Queue.
use_persistent_processing_nodes
persistent_processing_node_ttl_seconds
use_persistent_processing_nodes est activé, il est possible que certains nœuds de traitement n’aient pas été supprimés. Ce paramètre définit la durée pendant laquelle ces nœuds de traitement peuvent être supprimés en toute sécurité. Le même TTL est également utilisé pour le verrou du bucket en mode Ordered, qui peut être conservé plus longtemps qu’un seul nœud de traitement ; la valeur doit donc aussi en tenir compte.
Valeur par défaut : 21600 (6 heures).
Paramètres relatifs à S3
Accès à S3 basé sur les rôles
roleARN peut être transmis via le paramètre extra_credentials, comme indiqué ci-dessous :
Mode ordered de S3Queue
S3Queue permet de stocker moins de métadonnées dans ZooKeeper, mais il présente une limite : les fichiers ajoutés ultérieurement doivent avoir des noms alphanumériquement supérieurs.
Le mode S3Queue ordered, comme unordered, prend en charge le paramètre (s3queue_)processing_threads_num (le préfixe s3queue_ est facultatif), qui permet de contrôler le nombre de threads chargés du traitement local des fichiers S3 sur le serveur.
Pour le mode ordered sans partitionnement, ClickHouse peut reprendre l’énumération S3 à partir de la dernière clé traitée afin d’éviter de relister tout l’historique du préfixe. En mode ordered avec buckets, le point de reprise est choisi de manière prudente comme la plus petite clé traitée parmi tous les buckets afin d’éviter de sauter des fichiers non traités.
Cette optimisation de reprise de l’énumération n’est utilisée que pour les queues basées sur S3 en mode ordered sans partitionnement (pas pour AzureQueue ni lorsque partitioning_mode est défini).
En outre, le mode ordered introduit aussi un autre paramètre appelé (s3queue_)buckets, qui correspond à des « threads logiques ». Cela signifie que, dans un scénario distribué avec plusieurs serveurs ayant des répliques de table S3Queue, ce paramètre définit le nombre d’unités de traitement. Par exemple, chaque thread de traitement sur chaque réplique S3Queue tentera de verrouiller un certain bucket pour le traiter, chaque bucket étant attribué à certains fichiers selon le hash du nom de fichier. Par conséquent, dans un scénario distribué, il est fortement recommandé que le paramètre (s3queue_)buckets soit au moins égal au nombre de répliques, voire supérieur. Il n’y a aucun inconvénient à avoir un nombre de buckets supérieur au nombre de répliques. Le scénario optimal est que le paramètre (s3queue_)buckets soit égal au produit de number_of_replicas et de (s3queue_)processing_threads_num.
L’utilisation du paramètre (s3queue_)processing_threads_num n’est pas recommandée avant la version 24.6.
Le paramètre (s3queue_)buckets est disponible à partir de la version 24.6.
SELECT à partir du moteur de table S3Queue
stream_like_engine_allow_direct_select sur True.
Le moteur S3Queue dispose d’un paramètre spécial pour les requêtes SELECT : commit_on_select. Définissez-le sur False pour conserver les données dans la file d’attente après leur lecture, ou sur True pour les supprimer.
Description
SELECT n’est pas particulièrement utile pour l’importation en continu (sauf pour le débogage), car chaque fichier ne peut être importé qu’une seule fois. Il est plus pratique de créer des flux en temps réel à l’aide de vues matérialisées. Pour ce faire :
- Utilisez le moteur pour créer une table qui consomme les données du chemin spécifié dans S3 et considérez-la comme un flux de données.
- Créez une table avec la structure souhaitée.
- Créez une vue matérialisée qui convertit les données du moteur et les insère dans une table créée précédemment.
MATERIALIZED VIEW est associée au moteur, elle commence à collecter les données en arrière-plan.
Exemple :
Colonnes virtuelles
_path— Chemin du fichier._file— Nom du fichier._size— Taille du fichier._time— Date de création du fichier.
Caractères génériques dans le chemin
path peut spécifier plusieurs fichiers à l’aide de caractères génériques de style Bash. Pour être traité, un fichier doit exister et correspondre à l’intégralité du motif de chemin. La liste des fichiers est établie lors du SELECT (et non au moment du CREATE).
*— Remplace n’importe quel nombre de caractères, sauf/, y compris une chaîne vide.**— Remplace n’importe quel nombre de caractères, y compris/, y compris une chaîne vide.?— Remplace n’importe quel caractère unique.{some_string,another_string,yet_another_one}— Remplace l’une des chaînes'some_string', 'another_string', 'yet_another_one'.{N..M}— Remplace n’importe quel nombre dans la plage de N à M, bornes incluses. N et M peuvent comporter des zéros non significatifs, par exemple000..078.
{} sont similaires à la fonction de table remote.
Limitations
- Des lignes dupliquées peuvent apparaître dans les cas suivants :
-
une exception se produit pendant l’analyse, au milieu du traitement du fichier, et les tentatives sont activées via
s3queue_loading_retries; -
S3Queueest configuré sur plusieurs serveurs pointant vers le même chemin dans ZooKeeper, et la session Keeper expire avant qu’un serveur ait pu valider le fichier traité, ce qui peut conduire un autre serveur à reprendre le traitement du fichier, alors que celui-ci a déjà pu être partiellement ou entièrement traité par le premier serveur ; toutefois, ce n’est plus le cas depuis la version 25.8 siuse_persistent_processing_nodes = 1. - arrêt anormal du serveur.
- Si
S3Queueest configuré sur plusieurs serveurs pointant vers le même chemin dans ZooKeeper et que le modeOrderedest utilisé, alorss3queue_loading_retriesne fonctionnera pas. Ce problème sera bientôt corrigé.
Introspection
system.s3queue_metadata_cache et la table persistante system.s3queue_log.
system.s3queue_metadata_cache. Cette table n’est pas persistante et affiche l’état en mémoire deS3Queue: les fichiers en cours de traitement, ceux qui ont été traités ou ont échoué.
system.s3queue_log. Table persistante. Contient les mêmes informations quesystem.s3queue_metadata_cache, mais pour les fichiersprocessedetfailed.
system.s3queue_log, définissez sa configuration dans le fichier de configuration du serveur :