code: def unflatten(columns):
      
      structured = {}
      for entry in columns:
          schema_name = entry['table_schema']
          table_name = entry['table_name']
  
          if schema_name not in structured:
              structured[schema_name] = {}
          schema = structured[schema_name]
  
          if table_name not in schema:
              metadata = get_stripped_prefix(entry, 'table_')
              stats = get_stripped_prefix(entry, 'stats:')
              stats_dict = format_stats(stats)
  
              schema[table_name] = {
                  'metadata': metadata,
                  'stats': stats_dict,
                  'columns': {}
              }
  
          table = schema[table_name]
  
          column = get_stripped_prefix(entry, 'column_')
  
          # the index should really never be that big so it's ok to end up
          # serializing this to JSON (2^53 is the max safe value there)
          column['index'] = bigint(column['index'])
          table['columns'][column['name']] = column
      return structured
docs: Given a list of column dictionaries following this layout:
  
          [{
              'column_comment': None,
              'column_index': Decimal('1'),
              'column_name': 'id',
              'column_type': 'integer',
              'table_comment': None,
              'table_name': 'test_table',
              'table_schema': 'test_schema',
              'table_type': 'BASE TABLE'
          }]
  
      unflatten will convert them into a dict with this nested structure:
  
          {
              'test_schema': {
                  'test_table': {
                      'metadata': {
                          'comment': None,
                          'name': 'test_table',
                          'type': 'BASE TABLE',
                          'schema': 'test_schema',
                      },
                      'columns': {
                          "id": {
                              'type': 'integer',
                              'comment': None,
                              'index': bigint(1),
                              'name': 'id'
                          }
                      }
                  }
              }
          }
  
      Required keys in each column: table_schema, table_name, column_index
  
      Keys prefixed with 'column_' end up in per-column data and keys prefixed
      with 'table_' end up in table metadata. Keys without either prefix are
      ignored.