blob: 12f06feb07585d1cc4ef9daf1bf65f4236f0dc61 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- GitHub action javadoc-cleanup -->
<link rel="canonical" href="https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/googleads/GoogleAdsV14.html">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- End javadoc-cleanup block -->
<!-- Generated by javadoc -->
<title>GoogleAdsV14 (Apache Beam 2.55.1)</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="GoogleAdsV14 (Apache Beam 2.55.1)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsUserCredentialFactory.html" title="class in org.apache.beam.sdk.io.googleads"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.RateLimitPolicy.html" title="interface in org.apache.beam.sdk.io.googleads"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/beam/sdk/io/googleads/GoogleAdsV14.html" target="_top">Frames</a></li>
<li><a href="GoogleAdsV14.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.beam.sdk.io.googleads</div>
<h2 title="Class GoogleAdsV14" class="title">Class GoogleAdsV14</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.beam.sdk.io.googleads.GoogleAdsV14</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">GoogleAdsV14</span>
extends java.lang.Object</pre>
<div class="block"><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.html" title="class in org.apache.beam.sdk.io.googleads"><code>GoogleAdsV14</code></a> provides an API to read Google Ads API v14 reports.
<p>The Google Ads API does not use service account credentials in the same way as Google Cloud
Platform APIs do. Service account credentials are typically only used to delegate (using
domain-wide delegation) access through end user accounts. Providing credentials using the OAuth2
desktop flow may be preferable over domain wide delegation. Please refer to the <a
href="https://developers.google.com/google-ads/api/docs/oauth/overview">Google Ads API
documentation</a> for more information on OAuth2 in the Google Ads API.
<p>Defaults for OAuth 2.0 credentials, refresh token and developer token can be provided using
the following flags:
<pre>
--googleAdsClientId=your-client-id
--googleAdsClientSecret=your-client-secret
--googleAdsRefreshToken=your-refresh-token
--googleAdsDeveloperToken=your-developer-token
</pre>
<p>Use <a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.html#read--"><code>read()</code></a> to read either a bounded or unbounded <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> of
<code>GoogleAdsRow</code> from a single <a
href="https://developers.google.com/google-ads/api/docs/query/overview">Google Ads Query
Language</a> query using <a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.Read.html#withQuery-java.lang.String-"><code>GoogleAdsV14.Read.withQuery(String)</code></a> and a <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> of customer
IDs. Alternatively, use <a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.html#readAll--"><code>readAll()</code></a> to read either a bounded or unbounded
<a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> of <code>GoogleAdsRow</code> from a <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> of <code>SearchGoogleAdsStreamRequest</code> potentially containing many different queries.
<p>For example, using <a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.html#read--"><code>read()</code></a>:
<pre><code>
Pipeline p = Pipeline.create();
PCollection&lt;String&gt; customerIds =
p.apply(Create.of(Long.toString(1234567890L)));
PCollection&lt;GoogleAdsRow&gt; rows =
customerIds.apply(
GoogleAdsIO.v14()
.read()
.withRateLimitPolicy(MY_RATE_LIMIT_POLICY)
.withQuery(
"SELECT"
+ "campaign.id,"
+ "campaign.name,"
+ "campaign.status"
+ "FROM campaign"));
p.run();
</code></pre>
<p>Alternatively, using <a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.html#readAll--"><code>readAll()</code></a> to execute requests from a <a href="../../../../../../org/apache/beam/sdk/values/PCollection.html" title="class in org.apache.beam.sdk.values"><code>PCollection</code></a> of <code>SearchGoogleAdsStreamRequest</code>:
<pre><code>
Pipeline p = Pipeline.create();
PCollection&lt;SearchGoogleAdsStreamRequest&gt; requests =
p.apply(
Create.of(
ImmutableList.of(
SearchGoogleAdsStreamRequest.newBuilder()
.setCustomerId(Long.toString(1234567890L))
.setQuery(
"SELECT"
+ "campaign.id,"
+ "campaign.name,"
+ "campaign.status"
+ "FROM campaign")
.build())));
PCollection&lt;GoogleAdsRow&gt; rows =
requests.apply(GoogleAdsIO.v14().readAll().withRateLimitPolicy(MY_RATE_LIMIT_POLICY));
p.run();
</code></pre>
<h2>Client-side rate limiting</h2>
On construction of a <a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.html#read--"><code>read()</code></a> or <a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.html#readAll--"><code>readAll()</code></a> transform a
rate limiting policy must be specified to stay well under the assigned quota for the Google Ads
API. The Google Ads API enforces global rate limits from the developer token down to the customer
ID and depending on the access level of the developer token a limit on the total number of
executed operations per day. See <a
href="https://developers.google.com/google-ads/api/docs/best-practices/rate-limits">Rate
Limits</a> and <a
href="https://developers.google.com/google-ads/api/docs/best-practices/quotas">API Limits and
Quotas</a> in the Google Ads documentation for more details.
<p>It is recommended to host a shared rate limiting service to coordinate traffic to the Google
Ads API across all applications using the same developer token. Users of these transforms are
strongly advised to implement their own <a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.RateLimitPolicy.html" title="interface in org.apache.beam.sdk.io.googleads"><code>GoogleAdsV14.RateLimitPolicy</code></a> and <a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.RateLimitPolicyFactory.html" title="interface in org.apache.beam.sdk.io.googleads"><code>GoogleAdsV14.RateLimitPolicyFactory</code></a> to interact with a shared rate limiting service (e.g. <a
href="https://github.com/mailgun/gubernator">gubernator</a>) for any production workloads.
<h2>Required Minimum Functionality</h2>
Pipelines built using these transforms may still be subject to the Required Minimum Functionality
policy. Please review the policy carefully and have your tool reviewed by the Google Ads API
Review Team. See <a href="https://developers.google.com/google-ads/api/docs/rmf">Required Minimum
Functionality</a> and <a href="https://developers.google.com/google-ads/api/docs/rate-sheet">Rate
sheet & non-compliance fees</a> in the Google Ads API documentation for more details.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsIO.html#v14--"><code>GoogleAdsIO.v14()</code></a>,
<a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsOptions.html" title="interface in org.apache.beam.sdk.io.googleads"><code>GoogleAdsOptions</code></a>,
<a href="https://developers.google.com/google-ads/api/docs/best-practices/overview">Best
Practices in the Google Ads documentation</a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.RateLimitPolicy.html" title="interface in org.apache.beam.sdk.io.googleads">GoogleAdsV14.RateLimitPolicy</a></span></code>
<div class="block">This interface can be used to implement custom client-side rate limiting policies.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.RateLimitPolicyFactory.html" title="interface in org.apache.beam.sdk.io.googleads">GoogleAdsV14.RateLimitPolicyFactory</a></span></code>
<div class="block">Implement this interface to create a <a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.RateLimitPolicy.html" title="interface in org.apache.beam.sdk.io.googleads"><code>GoogleAdsV14.RateLimitPolicy</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.Read.html" title="class in org.apache.beam.sdk.io.googleads">GoogleAdsV14.Read</a></span></code>
<div class="block">A <a href="../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>PTransform</code></a> that reads the results of a Google Ads query as <code>GoogleAdsRow</code>
objects.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.ReadAll.html" title="class in org.apache.beam.sdk.io.googleads">GoogleAdsV14.ReadAll</a></span></code>
<div class="block">A <a href="../../../../../../org/apache/beam/sdk/transforms/PTransform.html" title="class in org.apache.beam.sdk.transforms"><code>PTransform</code></a> that reads the results of many <code>SearchGoogleAdsStreamRequest</code>
objects as <code>GoogleAdsRow</code> objects.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.SimpleRateLimitPolicy.html" title="class in org.apache.beam.sdk.io.googleads">GoogleAdsV14.SimpleRateLimitPolicy</a></span></code>
<div class="block">This rate limit policy wraps a <code>RateLimiter</code> and can be used in low volume and
development use cases as a client-side rate limiting policy.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.Read.html" title="class in org.apache.beam.sdk.io.googleads">GoogleAdsV14.Read</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.html#read--">read</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.ReadAll.html" title="class in org.apache.beam.sdk.io.googleads">GoogleAdsV14.ReadAll</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.html#readAll--">readAll</a></span>()</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="read--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>read</h4>
<pre>public&nbsp;<a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.Read.html" title="class in org.apache.beam.sdk.io.googleads">GoogleAdsV14.Read</a>&nbsp;read()</pre>
</li>
</ul>
<a name="readAll--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>readAll</h4>
<pre>public&nbsp;<a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.ReadAll.html" title="class in org.apache.beam.sdk.io.googleads">GoogleAdsV14.ReadAll</a>&nbsp;readAll()</pre>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsUserCredentialFactory.html" title="class in org.apache.beam.sdk.io.googleads"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../../org/apache/beam/sdk/io/googleads/GoogleAdsV14.RateLimitPolicy.html" title="interface in org.apache.beam.sdk.io.googleads"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/beam/sdk/io/googleads/GoogleAdsV14.html" target="_top">Frames</a></li>
<li><a href="GoogleAdsV14.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>