<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="fusiontables_v1.html">Fusion Tables API</a> . <a href="fusiontables_v1.column.html">column</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(tableId, columnId)</a></code></p>
<p class="firstline">Deletes the column.</p>
<p class="toc_element">
  <code><a href="#get">get(tableId, columnId)</a></code></p>
<p class="firstline">Retrieves a specific column by its id.</p>
<p class="toc_element">
  <code><a href="#insert">insert(tableId, body)</a></code></p>
<p class="firstline">Adds a new column to the table.</p>
<p class="toc_element">
  <code><a href="#list">list(tableId, pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">Retrieves a list of columns.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(tableId, columnId, body)</a></code></p>
<p class="firstline">Updates the name or type of an existing column. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(tableId, columnId, body)</a></code></p>
<p class="firstline">Updates the name or type of an existing column.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(tableId, columnId)</code>
  <pre>Deletes the column.

Args:
  tableId: string, Table from which the column is being deleted. (required)
  columnId: string, Name or identifier for the column being deleted. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(tableId, columnId)</code>
  <pre>Retrieves a specific column by its id.

Args:
  tableId: string, Table to which the column belongs. (required)
  columnId: string, Name or identifier for the column that is being requested. (required)

Returns:
  An object of the form:

    { # Specifies the id, name and type of a column in a table.
      "kind": "fusiontables#column", # Type name: a template for an individual column.
      "description": "A String", # Optional column description.
      "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
        "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
        "columnId": 42, # The id of the column in the base table from which this column is derived.
      },
      "columnId": 42, # Identifier for the column.
      "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
      "type": "A String", # Required type of the column.
      "name": "A String", # Required name of the column.
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(tableId, body)</code>
  <pre>Adds a new column to the table.

Args:
  tableId: string, Table for which a new column is being added. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Specifies the id, name and type of a column in a table.
    "kind": "fusiontables#column", # Type name: a template for an individual column.
    "description": "A String", # Optional column description.
    "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
      "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
      "columnId": 42, # The id of the column in the base table from which this column is derived.
    },
    "columnId": 42, # Identifier for the column.
    "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
    "type": "A String", # Required type of the column.
    "name": "A String", # Required name of the column.
  }


Returns:
  An object of the form:

    { # Specifies the id, name and type of a column in a table.
      "kind": "fusiontables#column", # Type name: a template for an individual column.
      "description": "A String", # Optional column description.
      "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
        "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
        "columnId": 42, # The id of the column in the base table from which this column is derived.
      },
      "columnId": 42, # Identifier for the column.
      "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
      "type": "A String", # Required type of the column.
      "name": "A String", # Required name of the column.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(tableId, pageToken=None, maxResults=None)</code>
  <pre>Retrieves a list of columns.

Args:
  tableId: string, Table whose columns are being listed. (required)
  pageToken: string, Continuation token specifying which result page to return. Optional.
  maxResults: integer, Maximum number of columns to return. Optional. Default is 5.

Returns:
  An object of the form:

    { # Represents a list of columns in a table.
    "nextPageToken": "A String", # Token used to access the next page of this result. No token is displayed if there are no more tokens left.
    "items": [ # List of all requested columns.
      { # Specifies the id, name and type of a column in a table.
          "kind": "fusiontables#column", # Type name: a template for an individual column.
          "description": "A String", # Optional column description.
          "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
            "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
            "columnId": 42, # The id of the column in the base table from which this column is derived.
          },
          "columnId": 42, # Identifier for the column.
          "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
          "type": "A String", # Required type of the column.
          "name": "A String", # Required name of the column.
        },
    ],
    "kind": "fusiontables#columnList", # Type name: a list of all columns.
    "totalItems": 42, # Total number of columns for the table.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(tableId, columnId, body)</code>
  <pre>Updates the name or type of an existing column. This method supports patch semantics.

Args:
  tableId: string, Table for which the column is being updated. (required)
  columnId: string, Name or identifier for the column that is being updated. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Specifies the id, name and type of a column in a table.
    "kind": "fusiontables#column", # Type name: a template for an individual column.
    "description": "A String", # Optional column description.
    "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
      "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
      "columnId": 42, # The id of the column in the base table from which this column is derived.
    },
    "columnId": 42, # Identifier for the column.
    "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
    "type": "A String", # Required type of the column.
    "name": "A String", # Required name of the column.
  }


Returns:
  An object of the form:

    { # Specifies the id, name and type of a column in a table.
      "kind": "fusiontables#column", # Type name: a template for an individual column.
      "description": "A String", # Optional column description.
      "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
        "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
        "columnId": 42, # The id of the column in the base table from which this column is derived.
      },
      "columnId": 42, # Identifier for the column.
      "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
      "type": "A String", # Required type of the column.
      "name": "A String", # Required name of the column.
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(tableId, columnId, body)</code>
  <pre>Updates the name or type of an existing column.

Args:
  tableId: string, Table for which the column is being updated. (required)
  columnId: string, Name or identifier for the column that is being updated. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Specifies the id, name and type of a column in a table.
    "kind": "fusiontables#column", # Type name: a template for an individual column.
    "description": "A String", # Optional column description.
    "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
      "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
      "columnId": 42, # The id of the column in the base table from which this column is derived.
    },
    "columnId": 42, # Identifier for the column.
    "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
    "type": "A String", # Required type of the column.
    "name": "A String", # Required name of the column.
  }


Returns:
  An object of the form:

    { # Specifies the id, name and type of a column in a table.
      "kind": "fusiontables#column", # Type name: a template for an individual column.
      "description": "A String", # Optional column description.
      "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
        "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
        "columnId": 42, # The id of the column in the base table from which this column is derived.
      },
      "columnId": 42, # Identifier for the column.
      "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
      "type": "A String", # Required type of the column.
      "name": "A String", # Required name of the column.
    }</pre>
</div>

</body></html>