airbytehq/PyAirbyte

source-google-analytics-data-api authentication - 'Client' was expected even only with service id

henryguyu opened this issue · 3 comments

I have 'auth_type': 'Service' in setting. however it asked for 'Client' which is for oauth.
below is the format of setting:

{
  "property_ids": [
    "..."
  ],
  "credentials": {
    "credentials_json": {
      "type": "service_account",
      "project_id": "...",
      "private_key_id": "...",
      "private_key": "...",
      "client_email": "...",
      "client_id": "...",
      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
      "token_uri": "https://oauth2.googleapis.com/token",
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
      "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/development%40famous-cove-353314.iam.gserviceaccount.com"
    },
    "auth_type": "Service"
  },
  "date_ranges_start_date": "2024-01-01"
}

and error message:

File "/usr/local/lib/python3.9/site-packages/airbyte/sources/base.py", line 580, in _execute for line in self.executor.execute(args): File "/usr/local/lib/python3.9/site-packages/airbyte/_executor.py", line 413, in execute yield from stream File "/usr/local/lib/python3.9/contextlib.py", line 126, in __exit__ next(self.gen) File "/usr/local/lib/python3.9/site-packages/airbyte/_executor.py", line 142, in _stream_from_subprocess raise exc.AirbyteSubprocessFailedError(airbyte.exceptions.AirbyteSubprocessFailedError: AirbyteSubprocessFailedError: Subprocess failed. Run Args: ['/usr/local/dataflow/.venv-source-google-analytics-data-api/bin/source-google-analytics-data-api', 'discover', '--config', '/tmp/tmpz4ev3eh8.json'] Exit Code: 1The above exception was the direct cause of the following exception:Traceback (most recent call last): File "/usr/local/dataflow/airbyte_connector.py", line 256, in <module> read_data_to_cache(arguments, config, cache) File "/usr/local/dataflow/airbyte_connector.py", line 88, in read_data_to_cache source.select_streams(streams) File "/usr/local/lib/python3.9/site-packages/airbyte/sources/base.py", line 126, in select_streams available_streams = self.get_available_streams() File "/usr/local/lib/python3.9/site-packages/airbyte/sources/base.py", line 222, in get_available_streams return [s.name for s in self.discovered_catalog.streams] File "/usr/local/lib/python3.9/site-packages/airbyte/sources/base.py", line 320, in discovered_catalog self._discovered_catalog = self._discover() File "/usr/local/lib/python3.9/site-packages/airbyte/sources/base.py", line 183, in _discover for msg in self._execute(["discover", "--config", config_file]): File "/usr/local/lib/python3.9/site-packages/airbyte/sources/base.py", line 593, in _execute raise exc.AirbyteConnectorReadError(airbyte.exceptions.AirbyteConnectorReadError: AirbyteConnectorReadError: Error when reading from the connector.Log output: 'Client' was expected Traceback (most recent call last): File "/usr/local/dataflow/.venv-source-google-analytics-data-api/bin/source-google-analytics-data-api", line 8, in <module> sys.exit(run()) File "/usr/local/dataflow/.venv-source-google-analytics-data-api/lib/python3.9/site-packages/source_google_analytics_data_api/run.py", line 18, in run launch(source, sys.argv[1:]) File "/usr/local/dataflow/.venv-source-google-analytics-data-api/lib/python3.9/site-packages/airbyte_cdk/entrypoint.py", line 235, in launch for message in source_entrypoint.run(parsed_args): File "/usr/local/dataflow/.venv-source-google-analytics-data-api/lib/python3.9/site-packages/airbyte_cdk/entrypoint.py", line 117, in run yield from map(AirbyteEntrypoint.airbyte_message_to_string, self.discover(source_spec, config)) File "/usr/local/dataflow/.venv-source-google-analytics-data-api/lib/python3.9/site-packages/airbyte_cdk/entrypoint.py", line 151, in discover self.validate_connection(source_spec, config) File "/usr/local/dataflow/.venv-source-google-analytics-data-api/lib/python3.9/site-packages/airbyte_cdk/entrypoint.py", line 192, in validate_connection check_config_against_spec_or_exit(connector_config, source_spec) File "/usr/local/dataflow/.venv-source-google-analytics-data-api/lib/python3.9/site-packages/airbyte_cdk/sources/utils/schema_helpers.py", line 175, in check_config_against_spec_or_exit raise AirbyteTracedException( airbyte_cdk.utils.traced_exception.AirbyteTracedException: 'Client' was expected Config validation error: 'Client' was expected

@henryguyu - thanks for reporting this. I'm not familiar with this connector and it is hard to provide immediate direction. Have you been able to locate the spec output for this connector and compare with the inputs you are provided? Can you print this with the following for comparison, and then paste that text back here to the issue if it doesn't sufficiently direct you to a resolution?

source = get_source(...)
source.print_config_spec()

Docs here: https://airbytehq.github.io/PyAirbyte/airbyte/sources.html#Source.print_config_spec

@aaronsteers thanks for your response. below is the spec I got with your suggestion. I consider my config meets the specification. can you help me to ensure it? my config is at the beginning of my first post.

<airbyte.sources.base.Source object at 0x7f2de55f3670>
$schema: https://json-schema.org/draft-07/schema#
additionalProperties: true
properties:
convert_conversions_event:
default: false
description: Enables conversion of conversions:* event metrics from intege
to floats. This is beneficial for preventing data rounding when the API re
float values for any conversions:* fields.
order: 7
title: Convert conversions:* Metrics to Float
type: boolean
credentials:
description: Credentials for the service
oneOf:
- properties:
access_token:
airbyte_secret: true
description: Access Token for making authenticated requests.
order: 4
title: Access Token
type: string
auth_type:
const: Client
order: 0
type: string
client_id:
description: The Client ID of your Google Analytics developer applicat
order: 1
title: Client ID
type: string
client_secret:
airbyte_secret: true
description: The Client Secret of your Google Analytics developer appl
order: 2
title: Client Secret
type: string
refresh_token:
airbyte_secret: true
description: The token for obtaining a new access token.
order: 3
title: Refresh Token
type: string
required:
- client_id
- client_secret
- refresh_token
title: Authenticate via Google (Oauth)
type: object
- properties:
auth_type:
const: Service
order: 0
type: string
credentials_json:
airbyte_secret: true
description: The JSON key linked to the service account used for autho
For steps on obtaining this key, refer to <a href="https://docs.airb
setup guide.
examples:
- '{ "type": "service_account", "project_id": YOUR_PROJECT_ID, "privat
YOUR_PRIVATE_KEY, ... }'
order: 1
title: Service Account JSON Key
type: string
required:
- credentials_json
title: Service Account Key Authentication
type: object
order: 0
title: Credentials
type: object
custom_reports_array:
description: You can add your Custom Analytics report by creating one.
items:
properties:
cohortSpec:
description: Cohort reports creates a time series of user retention fo
the cohort.
oneOf:
- properties:
enabled:
const: 'false'
type: string
title: Disabled
type: object
- properties:
cohortReportSettings:
description: Optional settings for a cohort report.
properties:
accumulate:
always_show: true
description: If true, accumulates the result from first touc
day to the end day
title: Accumulate
type: boolean
title: Cohort Report Settings
type: object
cohorts:
always_show: true
items:
properties:
dateRange:
properties:
endDate:
examples:
- '2021-01-01'
format: date
order: 3
pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$
pattern_descriptor: YYYY-MM-DD
title: End Date
type: string
startDate:
examples:
- '2021-01-01'
format: date
order: 2
pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$
pattern_descriptor: YYYY-MM-DD
title: Start Date
type: string
required:
- startDate
- endDate
type: object
dimension:
description: Dimension used by the cohort. Required and on
supports firstSessionDate
enum:
- firstSessionDate
order: 1
title: Dimension
type: string
name:
always_show: true
description: Assigns a name to this cohort. If not set, co
are named by their zero based index cohort_0, cohort_1,
order: 0
pattern: ^(?!(cohort_|RESERVED_)).$
title: Name
type: string
required:
- dimension
- dateRange
title: Cohorts
type: object
name: Cohorts
order: 0
type: array
cohortsRange:
order: 1
properties:
endOffset:
description: Specifies the end date of the extended reportin
date range for a cohort report.
minimum: 0
order: 2
title: End Offset
type: integer
granularity:
description: The granularity used to interpret the startOffs
and endOffset for the extended reporting date range for a
report.
enum:
- GRANULARITY_UNSPECIFIED
- DAILY
- WEEKLY
- MONTHLY
order: 0
title: Granularity
type: string
startOffset:
description: Specifies the start date of the extended report
date range for a cohort report.
minimum: 0
order: 1
title: Start Offset
type: integer
required:
- granularity
- endOffset
type: object
enabled:
const: 'true'
type: string
title: Enabled
type: object
order: 5
title: Cohort Reports
type: object
dimensionFilter:
description: Dimensions filter
oneOf:
- description: The FilterExpressions in andGroup have an AND relations
properties:
expressions:
items:
properties:
field_name:
order: 1
title: fieldName
type: string
filter:
oneOf:
- properties:
caseSensitive:
order: 2
tittle: caseSensitive
type: boolean
filter_name:
const: stringFilter
type: string
matchType:
items:
enum:
- MATCH_TYPE_UNSPECIFIED
- EXACT
- BEGINS_WITH
- ENDS_WITH
- CONTAINS
- FULL_REGEXP
- PARTIAL_REGEXP
title: ValidEnums
order: 1
title: matchType
type: array
value:
order: 0
tittle: value
type: string
required:
- filter_name
- value
title: stringFilter
type: object
- properties:
caseSensitive:
order: 1
tittle: caseSensitive
type: boolean
filter_name:
const: inListFilter
type: string
values:
items:
type: string
minItems: 1
order: 0
tittle: values
type: array
required:
- filter_name
- values
title: inListFilter
type: object
- properties:
filter_name:
const: numericFilter
type: string
operation:
items:
enum:
- OPERATION_UNSPECIFIED
- EQUAL
- LESS_THAN
- LESS_THAN_OR_EQUAL
- GREATER_THAN
- GREATER_THAN_OR_EQUAL
title: ValidEnums
order: 1
title: operation
type: array
value:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: value
type: object
required:
- filter_name
- operation
- value
title: numericFilter
type: object
- properties:
filter_name:
const: betweenFilter
type: string
fromValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: fromValue
type: object
toValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 1
tittle: toValue
type: object
required:
- filter_name
- fromValue
- toValue
title: betweenFilter
type: object
order: 2
title: filter
type: object
required:
- field_name
- filter
title: Expression
type: object
order: 1
title: Expressions
type: array
filter_type:
const: andGroup
order: 0
type: string
required:
- filter_type
- expressions
title: andGroup
type: object
- description: The FilterExpressions in orGroup have an OR relationshi
properties:
expressions:
items:
properties:
field_name:
order: 1
title: fieldName
type: string
filter:
oneOf:
- properties:
caseSensitive:
order: 2
tittle: caseSensitive
type: boolean
filter_name:
const: stringFilter
type: string
matchType:
items:
enum:
- MATCH_TYPE_UNSPECIFIED
- EXACT
- BEGINS_WITH
- ENDS_WITH
- CONTAINS
- FULL_REGEXP
- PARTIAL_REGEXP
title: ValidEnums
order: 1
title: matchType
type: array
value:
order: 0
tittle: value
type: string
required:
- filter_name
- value
title: stringFilter
type: object
- properties:
caseSensitive:
order: 1
tittle: caseSensitive
type: boolean
filter_name:
const: inListFilter
type: string
values:
items:
type: string
minItems: 1
order: 0
tittle: values
type: array
required:
- filter_name
- values
title: inListFilter
type: object
- properties:
filter_name:
const: numericFilter
type: string
operation:
items:
enum:
- OPERATION_UNSPECIFIED
- EQUAL
- LESS_THAN
- LESS_THAN_OR_EQUAL
- GREATER_THAN
- GREATER_THAN_OR_EQUAL
title: ValidEnums
order: 1
title: operation
type: array
value:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: value
type: object
required:
- filter_name
- operation
- value
title: numericFilter
type: object
- properties:
filter_name:
const: betweenFilter
type: string
fromValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: fromValue
type: object
toValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 1
tittle: toValue
type: object
required:
- filter_name
- fromValue
- toValue
title: betweenFilter
type: object
order: 2
title: filter
type: object
required:
- field_name
- filter
title: Expression
type: object
order: 1
title: Expressions
type: array
filter_type:
const: orGroup
order: 0
type: string
required:
- filter_type
- expressions
title: orGroup
type: object
- description: The FilterExpression is NOT of notExpression.
properties:
expression:
properties:
field_name:
order: 1
title: fieldName
type: string
filter:
oneOf:
- properties:
caseSensitive:
order: 2
tittle: caseSensitive
type: boolean
filter_name:
const: stringFilter
type: string
matchType:
items:
enum:
- MATCH_TYPE_UNSPECIFIED
- EXACT
- BEGINS_WITH
- ENDS_WITH
- CONTAINS
- FULL_REGEXP
- PARTIAL_REGEXP
title: ValidEnums
order: 1
title: matchType
type: array
value:
order: 0
tittle: value
type: string
required:
- filter_name
- value
title: stringFilter
type: object
- properties:
caseSensitive:
order: 1
tittle: caseSensitive
type: boolean
filter_name:
const: inListFilter
type: string
values:
items:
type: string
minItems: 1
order: 0
tittle: values
type: array
required:
- filter_name
- values
title: inListFilter
type: object
- properties:
filter_name:
const: numericFilter
type: string
operation:
items:
enum:
- OPERATION_UNSPECIFIED
- EQUAL
- LESS_THAN
- LESS_THAN_OR_EQUAL
- GREATER_THAN
- GREATER_THAN_OR_EQUAL
title: ValidEnums
order: 1
title: operation
type: array
value:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: value
type: object
required:
- filter_name
- operation
- value
title: numericFilter
type: object
- properties:
filter_name:
const: betweenFilter
type: string
fromValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: fromValue
type: object
toValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 1
tittle: toValue
type: object
required:
- filter_name
- fromValue
- toValue
title: betweenFilter
type: object
order: 2
title: filter
type: object
required:
- field_name
- filter
title: Expression
type: object
filter_type:
const: notExpression
order: 0
type: string
title: notExpression
type: object
- description: A primitive filter. In the same FilterExpression, all o
the filter's field names need to be either all dimensions.
properties:
field_name:
order: 1
title: fieldName
type: string
filter:
oneOf:
- properties:
caseSensitive:
order: 2
tittle: caseSensitive
type: boolean
filter_name:
const: stringFilter
type: string
matchType:
items:
enum:
- MATCH_TYPE_UNSPECIFIED
- EXACT
- BEGINS_WITH
- ENDS_WITH
- CONTAINS
- FULL_REGEXP
- PARTIAL_REGEXP
title: ValidEnums
order: 1
title: matchType
type: array
value:
order: 0
tittle: value
type: string
required:
- filter_name
- value
title: stringFilter
type: object
- properties:
caseSensitive:
order: 1
tittle: caseSensitive
type: boolean
filter_name:
const: inListFilter
type: string
values:
items:
type: string
minItems: 1
order: 0
tittle: values
type: array
required:
- filter_name
- values
title: inListFilter
type: object
- properties:
filter_name:
const: numericFilter
type: string
operation:
items:
enum:
- OPERATION_UNSPECIFIED
- EQUAL
- LESS_THAN
- LESS_THAN_OR_EQUAL
- GREATER_THAN
- GREATER_THAN_OR_EQUAL
title: ValidEnums
order: 1
title: operation
type: array
value:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: value
type: object
required:
- filter_name
- operation
- value
title: numericFilter
type: object
- properties:
filter_name:
const: betweenFilter
type: string
fromValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: fromValue
type: object
toValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 1
tittle: toValue
type: object
required:
- filter_name
- fromValue
- toValue
title: betweenFilter
type: object
order: 2
title: filter
type: object
filter_type:
const: filter
order: 0
type: string
required:
- field_name
- filter
title: filter
type: object
order: 3
title: Dimensions filter
type: object
dimensions:
description: A list of dimensions.
items:
type: string
minItems: 1
order: 1
title: Dimensions
type: array
metricFilter:
description: Metrics filter
oneOf:
- description: The FilterExpressions in andGroup have an AND relations
properties:
expressions:
items:
properties:
field_name:
order: 1
title: fieldName
type: string
filter:
oneOf:
- properties:
caseSensitive:
order: 2
tittle: caseSensitive
type: boolean
filter_name:
const: stringFilter
type: string
matchType:
items:
enum:
- MATCH_TYPE_UNSPECIFIED
- EXACT
- BEGINS_WITH
- ENDS_WITH
- CONTAINS
- FULL_REGEXP
- PARTIAL_REGEXP
title: ValidEnums
order: 1
title: matchType
type: array
value:
order: 0
tittle: value
type: string
required:
- filter_name
- value
title: stringFilter
type: object
- properties:
caseSensitive:
order: 1
tittle: caseSensitive
type: boolean
filter_name:
const: inListFilter
type: string
values:
items:
type: string
minItems: 1
order: 0
tittle: values
type: array
required:
- filter_name
- values
title: inListFilter
type: object
- properties:
filter_name:
const: numericFilter
type: string
operation:
items:
enum:
- OPERATION_UNSPECIFIED
- EQUAL
- LESS_THAN
- LESS_THAN_OR_EQUAL
- GREATER_THAN
- GREATER_THAN_OR_EQUAL
title: ValidEnums
order: 1
title: operation
type: array
value:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: value
type: object
required:
- filter_name
- operation
- value
title: numericFilter
type: object
- properties:
filter_name:
const: betweenFilter
type: string
fromValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: fromValue
type: object
toValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 1
tittle: toValue
type: object
required:
- filter_name
- fromValue
- toValue
title: betweenFilter
type: object
order: 2
title: filter
type: object
required:
- field_name
- filter
title: Expression
type: object
order: 1
title: Expressions
type: array
filter_type:
const: andGroup
order: 0
type: string
required:
- filter_type
- expressions
title: andGroup
type: object
- description: The FilterExpressions in orGroup have an OR relationshi
properties:
expressions:
items:
properties:
field_name:
order: 1
title: fieldName
type: string
filter:
oneOf:
- properties:
caseSensitive:
order: 2
tittle: caseSensitive
type: boolean
filter_name:
const: stringFilter
type: string
matchType:
items:
enum:
- MATCH_TYPE_UNSPECIFIED
- EXACT
- BEGINS_WITH
- ENDS_WITH
- CONTAINS
- FULL_REGEXP
- PARTIAL_REGEXP
title: ValidEnums
order: 1
title: matchType
type: array
value:
order: 0
tittle: value
type: string
required:
- filter_name
- value
title: stringFilter
type: object
- properties:
caseSensitive:
order: 1
tittle: caseSensitive
type: boolean
filter_name:
const: inListFilter
type: string
values:
items:
type: string
minItems: 1
order: 0
tittle: values
type: array
required:
- filter_name
- values
title: inListFilter
type: object
- properties:
filter_name:
const: numericFilter
type: string
operation:
items:
enum:
- OPERATION_UNSPECIFIED
- EQUAL
- LESS_THAN
- LESS_THAN_OR_EQUAL
- GREATER_THAN
- GREATER_THAN_OR_EQUAL
title: ValidEnums
order: 1
title: operation
type: array
value:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: value
type: object
required:
- filter_name
- operation
- value
title: numericFilter
type: object
- properties:
filter_name:
const: betweenFilter
type: string
fromValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: fromValue
type: object
toValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 1
tittle: toValue
type: object
required:
- filter_name
- fromValue
- toValue
title: betweenFilter
type: object
order: 2
title: filter
type: object
required:
- field_name
- filter
title: Expression
type: object
order: 1
title: Expressions
type: array
filter_type:
const: orGroup
order: 0
type: string
required:
- filter_type
- expressions
title: orGroup
type: object
- description: The FilterExpression is NOT of notExpression.
properties:
expression:
properties:
field_name:
order: 1
title: fieldName
type: string
filter:
oneOf:
- properties:
caseSensitive:
order: 2
tittle: caseSensitive
type: boolean
filter_name:
const: stringFilter
type: string
matchType:
items:
enum:
- MATCH_TYPE_UNSPECIFIED
- EXACT
- BEGINS_WITH
- ENDS_WITH
- CONTAINS
- FULL_REGEXP
- PARTIAL_REGEXP
title: ValidEnums
order: 1
title: matchType
type: array
value:
order: 0
tittle: value
type: string
required:
- filter_name
- value
title: stringFilter
type: object
- properties:
caseSensitive:
order: 1
tittle: caseSensitive
type: boolean
filter_name:
const: inListFilter
type: string
values:
items:
type: string
minItems: 1
order: 0
tittle: values
type: array
required:
- filter_name
- values
title: inListFilter
type: object
- properties:
filter_name:
const: numericFilter
type: string
operation:
items:
enum:
- OPERATION_UNSPECIFIED
- EQUAL
- LESS_THAN
- LESS_THAN_OR_EQUAL
- GREATER_THAN
- GREATER_THAN_OR_EQUAL
title: ValidEnums
order: 1
title: operation
type: array
value:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: value
type: object
required:
- filter_name
- operation
- value
title: numericFilter
type: object
- properties:
filter_name:
const: betweenFilter
type: string
fromValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: fromValue
type: object
toValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 1
tittle: toValue
type: object
required:
- filter_name
- fromValue
- toValue
title: betweenFilter
type: object
order: 2
title: filter
type: object
required:
- field_name
- filter
title: Expression
type: object
filter_type:
const: notExpression
order: 0
type: string
title: notExpression
type: object
- description: A primitive filter. In the same FilterExpression, all o
the filter's field names need to be either all metrics.
properties:
field_name:
order: 1
title: fieldName
type: string
filter:
oneOf:
- properties:
caseSensitive:
order: 2
tittle: caseSensitive
type: boolean
filter_name:
const: stringFilter
type: string
matchType:
items:
enum:
- MATCH_TYPE_UNSPECIFIED
- EXACT
- BEGINS_WITH
- ENDS_WITH
- CONTAINS
- FULL_REGEXP
- PARTIAL_REGEXP
title: ValidEnums
order: 1
title: matchType
type: array
value:
order: 0
tittle: value
type: string
required:
- filter_name
- value
title: stringFilter
type: object
- properties:
caseSensitive:
order: 1
tittle: caseSensitive
type: boolean
filter_name:
const: inListFilter
type: string
values:
items:
type: string
minItems: 1
order: 0
tittle: values
type: array
required:
- filter_name
- values
title: inListFilter
type: object
- properties:
filter_name:
const: numericFilter
type: string
operation:
items:
enum:
- OPERATION_UNSPECIFIED
- EQUAL
- LESS_THAN
- LESS_THAN_OR_EQUAL
- GREATER_THAN
- GREATER_THAN_OR_EQUAL
title: ValidEnums
order: 1
title: operation
type: array
value:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: value
type: object
required:
- filter_name
- operation
- value
title: numericFilter
type: object
- properties:
filter_name:
const: betweenFilter
type: string
fromValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 0
tittle: fromValue
type: object
toValue:
oneOf:
- properties:
value:
type: string
value_type:
const: int64Value
type: string
required:
- value_type
- value
title: int64Value
type: object
- properties:
value:
type: number
value_type:
const: doubleValue
type: string
required:
- value_type
- value
title: doubleValue
type: object
order: 1
tittle: toValue
type: object
required:
- filter_name
- fromValue
- toValue
title: betweenFilter
type: object
order: 2
title: filter
type: object
filter_type:
const: filter
order: 0
type: string
required:
- field_name
- filter
title: filter
type: object
order: 4
title: Metrics filter
type: object
metrics:
description: A list of metrics.
items:
type: string
minItems: 1
order: 2
title: Metrics
type: array
name:
description: The name of the custom report, this name would be used as
name.
order: 0
title: Name
type: string
required:
- name
- dimensions
- metrics
title: Custom Report Config
type: object
order: 4
title: Custom Reports
type: array
date_ranges_start_date:
description: The start date from which to replicate report data in the forma
YYYY-MM-DD. Data generated before this date will not be included in the re
Not applied to custom Cohort reports.
examples:
- '2021-01-01'
format: date
order: 2
pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$
pattern_descriptor: YYYY-MM-DD
title: Start Date
type: string
keep_empty_rows:
default: false
description: If false, each row with all metrics equal to 0 will not be retu
If true, these rows will be returned if they are not separately removed by
filter. More information is available in <a href="https://developers.googl
documentation.
order: 6
title: Keep Empty Rows
type: boolean
property_ids:
description: A list of your Property IDs. The Property ID is a unique number
to each property in Google Analytics, found in your GA4 property URL. This
allows the connector to track the specific events associated with your pro
Refer to the <a href='https://developers.google.com/analytics/devguides/re
Analytics documentation to locate your property ID.
examples:
- - '1738294'
- '5729978930'
items:
pattern: ^[0-9]
$
type: string
order: 1
title: Property IDs
type: array
window_in_days:
default: 1
description: The interval in days for each data request made to the Google A
API. A larger value speeds up data sync, but increases the chance of data
which may result in inaccuracies. We recommend a value of 1 to minimize sa
unless speed is an absolute priority over accuracy. Acceptable values rang
from 1 to 364. Does not apply to custom Cohort reports. More information i
available in <a href="https://docs.airbyte.com/integrations/sources/google
documentation.
examples:
- 30
- 60
- 90
- 120
- 200
- 364
maximum: 364
minimum: 1
order: 5
title: Data Request Interval (Days)
type: integer
required:

  • property_ids
    title: Google Analytics (Data API) Spec
    type: object

@aaronsteers is there any progress? thanks so much!