<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="#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, pageToken=None, maxResults=None, selectedFields=None, startIndex=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="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;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;kind&quot;: &quot;bigquery#tableDataInsertAllRequest&quot;, # The resource type of the response.
    &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;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;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;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;reason&quot;: &quot;A String&quot;, # A short error code that summarizes the error.
          },
        ],
        &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, pageToken=None, maxResults=None, selectedFields=None, startIndex=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)
  pageToken: string, Page token, returned by a previous call, identifying the result set
  maxResults: integer, Maximum number of results to return
  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

Returns:
  An object of the form:

    {
    &quot;totalRows&quot;: &quot;A String&quot;, # The total number of rows in the complete table.
    &quot;etag&quot;: &quot;A String&quot;, # A hash of this page of results.
    &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;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;kind&quot;: &quot;bigquery#tableDataList&quot;, # The resource type of the response.
  }</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>