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 :
cachecomplex_key_cachessd_cachecomplex_key_ssd_cachedirectcomplex_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
))<source>
<executable_pool>
<command><command>while read key; do printf "$key\tData for key $key\n"; done</command</command>
<format>TabSeparated</format>
<pool_size>10</pool_size>
<max_command_execution_time>10<max_command_execution_time>
<implicit_key>false</implicit_key>
</executable_pool>
</source>Champs de paramétrage :
| Paramètre | Description |
|---|---|
command |
Le chemin absolu vers le fichier exécutable, ou le nom du fichier (si le répertoire du programme figure dans PATH). |
format |
Le format de fichier. Tous les formats décrits dans Formats sont pris en charge. |
pool_size |
Taille 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_timeout |
Le 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_time |
Temps 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_timeout |
Dé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_timeout |
Délai d'attente pour l'écriture des données vers le stdin de la commande, en millisecondes. Valeur par défaut : 10000. Facultatif. |
implicit_key |
Le 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_direct |
Si 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_header |
Contrô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.