<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="bigquery_v2.html">BigQuery API</a> . <a href="bigquery_v2.tabledata.html">tabledata</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#insertAll">insertAll(projectId, datasetId, tableId, body=None)</a></code></p>
<p class="firstline">Streams data into BigQuery one record at a time without needing to run a load job. Requires the WRITER dataset role.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, datasetId, tableId, selectedFields=None, startIndex=None, maxResults=None, pageToken=None)</a></code></p>
<p class="firstline">Retrieves table data from a specified set of rows. Requires the READER dataset role.</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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="insertAll">insertAll(projectId, datasetId, tableId, body=None)</code>
  <pre>Streams data into BigQuery one record at a time without needing to run a load job. Requires the WRITER dataset role.

Args:
  projectId: string, Project ID of the destination table. (required)
  datasetId: string, Dataset ID of the destination table. (required)
  tableId: string, Table ID of the destination table. (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;templateSuffix&quot;: &quot;A String&quot;, # If specified, treats the destination table as a base template, and inserts the rows into an instance table named &quot;{destination}{templateSuffix}&quot;. BigQuery will manage creation of the instance table, using the schema of the base template table. See https://cloud.google.com/bigquery/streaming-data-into-bigquery#template-tables for considerations when working with templates tables.
    &quot;kind&quot;: &quot;bigquery#tableDataInsertAllRequest&quot;, # The resource type of the response.
    &quot;ignoreUnknownValues&quot;: True or False, # [Optional] Accept rows that contain values that do not match the schema. The unknown values are ignored. Default is false, which treats unknown values as errors.
    &quot;rows&quot;: [ # The rows to insert.
      {
        &quot;insertId&quot;: &quot;A String&quot;, # [Optional] A unique ID for each row. BigQuery uses this property to detect duplicate insertion requests on a best-effort basis.
        &quot;json&quot;: { # Represents a single JSON object. # [Required] A JSON object that contains a row of data. The object&#x27;s properties and values must match the destination table&#x27;s schema.
          &quot;a_key&quot;: &quot;&quot;,
        },
      },
    ],
    &quot;skipInvalidRows&quot;: True or False, # [Optional] Insert all valid rows of a request, even if invalid rows exist. The default value is false, which causes the entire request to fail if any invalid rows exist.
  }


Returns:
  An object of the form:

    {
    &quot;insertErrors&quot;: [ # An array of errors for rows that were not inserted.
      {
        &quot;errors&quot;: [ # Error information for the row indicated by the index property.
          {
            &quot;message&quot;: &quot;A String&quot;, # A human-readable description of the error.
            &quot;reason&quot;: &quot;A String&quot;, # A short error code that summarizes the error.
            &quot;location&quot;: &quot;A String&quot;, # Specifies where the error occurred, if present.
            &quot;debugInfo&quot;: &quot;A String&quot;, # Debugging information. This property is internal to Google and should not be used.
          },
        ],
        &quot;index&quot;: 42, # The index of the row that error applies to.
      },
    ],
    &quot;kind&quot;: &quot;bigquery#tableDataInsertAllResponse&quot;, # The resource type of the response.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, datasetId, tableId, selectedFields=None, startIndex=None, maxResults=None, pageToken=None)</code>
  <pre>Retrieves table data from a specified set of rows. Requires the READER dataset role.

Args:
  projectId: string, Project ID of the table to read (required)
  datasetId: string, Dataset ID of the table to read (required)
  tableId: string, Table ID of the table to read (required)
  selectedFields: string, List of fields to return (comma-separated). If unspecified, all fields are returned
  startIndex: string, Zero-based index of the starting row to read
  maxResults: integer, Maximum number of results to return
  pageToken: string, Page token, returned by a previous call, identifying the result set

Returns:
  An object of the form:

    {
    &quot;totalRows&quot;: &quot;A String&quot;, # The total number of rows in the complete table.
    &quot;kind&quot;: &quot;bigquery#tableDataList&quot;, # The resource type of the response.
    &quot;pageToken&quot;: &quot;A String&quot;, # A token used for paging results. Providing this token instead of the startIndex parameter can help you retrieve stable results when an underlying table is changing.
    &quot;rows&quot;: [ # Rows of results.
      {
        &quot;f&quot;: [ # Represents a single row in the result set, consisting of one or more fields.
          {
            &quot;v&quot;: &quot;&quot;,
          },
        ],
      },
    ],
    &quot;etag&quot;: &quot;A String&quot;, # A hash of this page of results.
  }</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 &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>