private static String getFunctionType(ParametricFunction function) {
   if (function.isAggregate()) {
     return "aggregate";
   }
   if (function.isWindow()) {
     return "window";
   }
   return "scalar";
 }
 private InternalTable buildFunctions() {
   InternalTable.Builder table =
       InternalTable.builder(informationSchemaTableColumns(TABLE_INTERNAL_FUNCTIONS));
   for (ParametricFunction function : metadata.listFunctions()) {
     if (function.isApproximate()) {
       continue;
     }
     table.add(
         function.getSignature().getName(),
         Joiner.on(", ").join(function.getSignature().getArgumentTypes()),
         function.getSignature().getReturnType().toString(),
         getFunctionType(function),
         function.isDeterministic(),
         nullToEmpty(function.getDescription()));
   }
   return table.build();
 }