code: def RDFValueToBigQuerySchema(self, value):
      
      fields_array = []
      for type_info in value.__class__.type_infos:
        # Nested structures are indicated by setting type "RECORD"
        if type_info.__class__.__name__ == "ProtoEmbedded":
          fields_array.append({
              "name": type_info.name,
              "type": "RECORD",
              "description": type_info.description,
              "fields": self.RDFValueToBigQuerySchema(value.Get(type_info.name))
          })
        else:
          # If we don't have a specific map use string.
          bq_type = self.RDF_BIGQUERY_TYPE_MAP.get(type_info.proto_type_name,
                                                   None) or "STRING"
  
          # For protos with RDF types we need to do some more checking to properly
          # covert types.
          if hasattr(type_info, "original_proto_type_name"):
            if type_info.original_proto_type_name in [
                "RDFDatetime", "RDFDatetimeSeconds"
            ]:
              bq_type = "TIMESTAMP"
            elif type_info.proto_type_name == "uint64":
              # This is to catch fields like st_mode which are stored as ints but
              # exported as more useful strings. Things which are just plain ints
              # won't have an RDF type specified and so will be exported as
              # INTEGER
              bq_type = "STRING"
  
          fields_array.append({
              "name": type_info.name,
              "type": bq_type,
              "description": type_info.description
          })
      return fields_array
docs: Convert Exported* rdfvalue into a BigQuery schema.