I'm running tap-zendesk to target-athena in a loca...
# troubleshooting
l
I'm running tap-zendesk to target-athena in a local docker image and it behaves normally until the very end where it errors with
Run invocation could not be completed as block failed: Extractor failed
.
Copy code
2023-04-28T16:35:02.172064Z [info     ] Incremental state has been updated at 2023-04-28 16:35:02.171898.
2023-04-28T16:35:02.783462Z [error    ] Extractor failed
2023-04-28T16:35:02.783798Z [error    ] Block run completed.           block_type=ExtractLoadBlocks err=RunnerError('Extractor failed') exit_codes={<PluginType.EXTRACTORS: 'extractors'>: 1} set_number=0 success=False
I'm just not sure what to make of this.
t
@lukas_gust look further back in the logs - there real error from the tap will be in there somewhere.
There is often a long gap between the actual error reported by the tap and the error that Meltano reports at the end. The error probably won't have a state of "error" either - Meltano reports all logging from the taps and targets as "info". 😕
l
Sure enough. ```2023-04-28T163429.845197Z [info ] time=2023-04-28 163429 name=singer level=CRITICAL message=404 Client Error: Not Found for url: https://letsonboard1673547677.zendesk.com/api/v2/help_center/incremental/articles.json?start_time=1577836800 cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.845396Z [info ] Traceback (most recent call last): cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.845552Z [info ] File "/project/.meltano/extractors/tap-zendesk/venv/lib/python3.9/site-packages/requests/models.py", line 971, in json cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.845758Z [info ] return complexjson.loads(self.text, **kwargs) cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.845923Z [info ] File "/project/.meltano/extractors/tap-zendesk/venv/lib/python3.9/site-packages/simplejson/__init__.py", line 516, in loads cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.846205Z [info ] return _default_decoder.decode(s) cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.846643Z [info ] File "/project/.meltano/extractors/tap-zendesk/venv/lib/python3.9/site-packages/simplejson/decoder.py", line 370, in decode cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.846973Z [info ] obj, end = self.raw_decode(s) cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.847356Z [info ] File "/project/.meltano/extractors/tap-zendesk/venv/lib/python3.9/site-packages/simplejson/decoder.py", line 400, in raw_decode cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.847753Z [info ] return self.scan_once(s, idx=_w(s, idx).end()) cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.848163Z [info ] simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0) cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.848587Z [info ] cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.849004Z [info ] During handling of the above exception, another exception occurred: cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.849335Z [info ] cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.849760Z [info ] Traceback (most recent call last): cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.850195Z [info ] File "/project/.meltano/extractors/tap-zendesk/venv/lib/python3.9/site-packages/zenpy/lib/api.py", line 298, in _check_response cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.850589Z [info ] _json = response.json() cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.851005Z [info ] File "/project/.meltano/extractors/tap-zendesk/venv/lib/python3.9/site-packages/requests/models.py", line 975, in json cmd_type=elb consumer=False name=tap-zendesk producer=True stdio=stderr string_id=tap-zendesk 2023-04-28T163429.851375Z [info ] raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) cmd_type=elb consumer=False name…
e
Thanks @lukas_gust, that’s helpful. It seems the tap is hitting a 404 status on the articles endpoint. The URL looks ok looking at the docs, so perhaps your subdomain
letsonboard167354767
is incorrect? That is, assuming that
articles
is the first stream being synced.
l
Unfortunately, everything syncs just fine except articles which we don't use. So it must be a subdomain issue since if it were an oauth token issue I'd expect a different code. That being said I'm not expecting any need to actually sync articles, but I'd like to ensure it exits gracefully.
Adding an exclude worked just fine. Curious, I can't seem to just have and exclusion. I must add a select splat followed by the exclusion for it to select anything
Copy code
select:
    - '*'
    - '!articles.*'
u
It’s a result of the discovered Singer catalog for the tap, where all streams are deselected by default. The
"*"
value is required to select all streams. You didn’t need to specify it before because it’s actually the default value for
select
, but you’re now overriding it so you need to explicitly select all streams.
l
So why would specifying the select above affect the data that is pulled from
tap-zendesk
? when no selection is defined in
meltano.yml
it loads data, but when the select is there it does not... strange
u
oh, maybe you need
Copy code
select:
    - '*.*'          # select all fields in all streams
    - '!articles.*'  # ...but exclude articles
l
This was it! ^ Thank you Edgar!!
e
Awesome!