Je pense que le problème que vous rencontrez est principalement liée syntaxe. Si vous avez une variable nommée $ foo, $ {foo} référence la même variable. Donc, les références $ {table} et $ {schema} dans votre chaîne sql fonctionnent bien.
Le problème est avec $ {col.column_name}. Votre variable (je suppose) s'appelle $ col et a un membre nommé nom_colonne. Comme Robert et Steven l'indiquent tous deux dans leurs réponses, pour y faire référence, vous devez utiliser $ ($ col.column_name). En général, $ (expression) sera remplacé par la valeur de l'expression.
La raison pour autoriser les accolades dans les noms de variables est que les variables peuvent avoir des caractères inhabituels dans leurs noms. Je recommande de ne pas utiliser la syntaxe $ {} (à moins que vous n'ayez une raison impérieuse), et de la remplacer par des références droites $ var pour les variables et $ ($ var.member) pour les références membres dans les chaînes.