code: def as_cql_query(self, formatted=False):
          
          ret = "%s TABLE %s.%s (%s" % (
              ('VIRTUAL' if self.virtual else 'CREATE'),
              protect_name(self.keyspace_name),
              protect_name(self.name),
              "\n" if formatted else "")
  
          if formatted:
              column_join = ",\n"
              padding = "    "
          else:
              column_join = ", "
              padding = ""
  
          columns = []
          for col in self.columns.values():
              columns.append("%s %s%s" % (protect_name(col.name), col.cql_type, ' static' if col.is_static else ''))
  
          if len(self.partition_key) == 1 and not self.clustering_key:
              columns[0] += " PRIMARY KEY"
  
          ret += column_join.join("%s%s" % (padding, col) for col in columns)
  
          # primary key
          if len(self.partition_key) > 1 or self.clustering_key:
              ret += "%s%sPRIMARY KEY (" % (column_join, padding)
  
              if len(self.partition_key) > 1:
                  ret += "(%s)" % ", ".join(protect_name(col.name) for col in self.partition_key)
              else:
                  ret += protect_name(self.partition_key[0].name)
  
              if self.clustering_key:
                  ret += ", %s" % ", ".join(protect_name(col.name) for col in self.clustering_key)
  
              ret += ")"
  
          # properties
          ret += "%s) WITH " % ("\n" if formatted else "")
          ret += self._property_string(formatted, self.clustering_key, self.options, self.is_compact_storage)
  
          return ret
docs: Returns a CQL query that can be used to recreate this table (index
          creations are not included).  If `formatted` is set to :const:`True`,
          extra whitespace will be added to make the query human readable.