Passer au contenu principal
Executable pool permet de charger des données à partir d’un pool de processus. Cette source ne fonctionne pas avec les dictionary layouts qui doivent charger toutes les données depuis la source. Executable pool fonctionne si le dictionnaire est stocké à l’aide de l’un des layouts suivants :
  • cache
  • complex_key_cache
  • ssd_cache
  • complex_key_ssd_cache
  • direct
  • complex_key_direct
Executable pool lance un pool de processus avec la commande spécifiée et les maintient en cours d’exécution jusqu’à leur arrêt. Le programme doit lire les données depuis STDIN tant qu’elles sont disponibles et écrire le résultat sur STDOUT. Il peut attendre le bloc de données suivant sur STDIN. ClickHouse ne fermera pas STDIN après le traitement d’un bloc de données, mais y enverra un autre chunk de données si nécessaire. Le script exécutable doit être conçu pour ce mode de traitement des données : il doit surveiller STDIN et vider rapidement les données vers STDOUT. Exemple de paramètres :
SOURCE(EXECUTABLE_POOL(
    command 'while read key; do printf "$key\tData for key $key\n"; done'
    format 'TabSeparated'
    pool_size 10
    max_command_execution_time 10
    implicit_key false
))
Champs de paramétrage :
ParamètreDescription
commandLe chemin absolu vers le fichier exécutable, ou le nom du fichier (si le répertoire du programme figure dans PATH).
formatLe format de fichier. Tous les formats décrits dans Formats sont pris en charge.
pool_sizeTaille du pool. Si 0 est spécifié pour pool_size, il n’y a pas de limite de taille du pool. La valeur par défaut est 16.
command_termination_timeoutLe script exécutable doit contenir une boucle principale en lecture-écriture. Une fois le dictionnaire détruit, le pipe est fermé, et le fichier exécutable dispose de command_termination_timeout secondes pour s’arrêter avant que ClickHouse n’envoie un signal SIGTERM au processus enfant. Exprimé en secondes. La valeur par défaut est 10. Facultatif.
max_command_execution_timeTemps d’exécution maximal de la commande du script exécutable pour traiter un bloc de données. Exprimé en secondes. La valeur par défaut est 10. Facultatif.
command_read_timeoutDélai d’attente pour la lecture des données depuis le stdout de la commande, en millisecondes. Valeur par défaut : 10000. Facultatif.
command_write_timeoutDélai d’attente pour l’écriture des données vers le stdin de la commande, en millisecondes. Valeur par défaut : 10000. Facultatif.
implicit_keyLe fichier source exécutable peut ne renvoyer que des valeurs, et la correspondance avec les clés demandées est alors déterminée implicitement par l’ordre des rows dans le résultat. La valeur par défaut est false. Facultatif.
execute_directSi execute_direct = 1, alors command est recherché dans le dossier user_scripts spécifié par user_scripts_path. Des arguments de script supplémentaires peuvent être indiqués en les séparant par des espaces. Exemple : script_name arg1 arg2. Si execute_direct = 0, command est passé comme argument à bin/sh -c. La valeur par défaut est 1. Facultatif.
send_chunk_headerContrôle s’il faut envoyer le nombre de rows avant d’envoyer un chunk de données au processus. La valeur par défaut est false. Facultatif.
Cette source de dictionnaire ne peut être configurée que via une configuration XML. La création de dictionnaires avec une source exécutable via DDL est désactivée, sinon l’utilisateur de la DB pourrait exécuter un binaire arbitraire sur un nœud ClickHouse.
Dernière modification le 25 juin 2026