docs: def convert_column(data, schemae):
      """Convert known types from primitive to rich."""
      ctype = schemae.converted_type
      if ctype == parquet_thrift.ConvertedType.DECIMAL:
          scale_factor = Decimal("10e-{}".format(schemae.scale))
          if schemae.type == parquet_thrift.Type.INT32 or schemae.type == parquet_thrift.Type.INT64:
              return [Decimal(unscaled) * scale_factor for unscaled in data]
          return [Decimal(intbig(unscaled)) * scale_factor for unscaled in data]
      elif ctype == parquet_thrift.ConvertedType.DATE:
          return [datetime.date.fromordinal(d) for d in data]
      elif ctype == parquet_thrift.ConvertedType.TIME_MILLIS:
          return [datetime.timedelta(milliseconds=d) for d in data]
      elif ctype == parquet_thrift.ConvertedType.TIMESTAMP_MILLIS:
          return [datetime.datetime.utcfromtimestamp(d / 1000.0) for d in data]
      elif ctype == parquet_thrift.ConvertedType.UTF8:
          return [codecs.decode(item, "utf-8") for item in data]
      elif ctype == parquet_thrift.ConvertedType.UINT_8:
          return _convert_unsigned(data, 'b')
      elif ctype == parquet_thrift.ConvertedType.UINT_16:
          return _convert_unsigned(data, 'h')
      elif ctype == parquet_thrift.ConvertedType.UINT_32:
          return _convert_unsigned(data, 'i')
      elif ctype == parquet_thrift.ConvertedType.UINT_64:
          return _convert_unsigned(data, 'q')
      elif ctype == parquet_thrift.ConvertedType.JSON:
          return [json.loads(s) for s in codecs.iterdecode(data, "utf-8")]
      elif ctype == parquet_thrift.ConvertedType.BSON and bson:
          return [bson.BSON(s).decode() for s in data]
      else:
          logger.info("Converted type '%s'' not handled",
                      parquet_thrift.ConvertedType._VALUES_TO_NAMES[ctype])  # pylint:disable=protected-access
      return data