Migrating from AdWords to GoogleAds api.

Querying search_term_view:

val googleAdsClient: GoogleAdsClient = GoogleAdsClient.newBuilder()   .setCredentials(credential)   .setDeveloperToken(developerToken)   .setLoginCustomerId(loginCustomerId.toLong)   .build()     val svc = googleAdsClient.getLatestVersion.createGoogleAdsServiceClient() val query = s"""   SELECT      segments.keyword.info.text     ,search_term_view.search_term     ,segments.date   FROM search_term_view   WHERE segments.date BETWEEN '2022-01-01' AND '2022-01-01' """ svc.search(customerId, query).iteratePages().asScala.foreach { page =>   page.iterateAll().asScala.foreach { row =>     //row processing   } } 

The issue is that svc.search() skips rows, if one of columns is null. So getting results like

text1,term1 text2,term2 

While same request to Adwords api returns results like

text1,term1 text2,term2 --,term3 

Haven't found anything about nulls ignoring in docs.

Using latest google ads v10 lib: "com.google.api-ads" % "google-ads" % "17.0.1"

I get the error :

{   "message": "The caller does not have permission",   "code": 7,   "status": "PERMISSION_DENIED",   "details": [     {       "@type": "type.googleapis.com\/google.ads.googleads.v10.errors.GoogleAdsFailure",       "errors": [         {           "errorCode": {             "authorizationError": "USER_PERMISSION_DENIED"           },           "message": "User doesn't have permission to access customer. Note: If you're accessing a client customer, the manager's customer id must be set in the 'login-customer-id' header. See https:\/\/developers.google.com\/google-ads\/api\/docs\/concepts\/call-structure#cid"         }       ],       "requestId": "asds33ad3sdadad334"     }   ] } 

and the code I get from here : https://developers.google.com/google-ads/api/docs/reporting/example

what I need to do with login-customer-id ?

I've seen a slide which advises to cache with a dictionary. In which case we can even get the same budget twice? What does it save?

The API docs state that:

getBudget() Returns the budget of the campaign. In order to change the campaign's budget,  

We are using the Google Ads transfer in BigQuery to ingest our Google Ads data. One thing I have noticed when querying the results is that all of the metrics are exactly 156x of the values we would expect in the Google Ads UI (cost, clicks, etc.)

We have tested multiple transfers and each time we have this same issue. The transfer process seems pretty straight forward, but am I missing something? Has anyone else noticed a similar issue or have any ideas of what to look at to adjust in the data transfer?