visch
08/23/2023, 2:27 PM{"type": "SCHEMA", "stream": "Tenant__History", "schema": {"type": "object", "additionalProperties": false, "properties": {"Id": {"type": "string"}, "CreatedDate": {"anyOf": [{"type": "string", "format": "date-time"}, "OldValue": {}, "NewValue": {}}}, "key_properties": ["Id"], "bookmark_properties": ["CreatedDate"]}
Specifically OldValue
and NewValue
should we just cast these to strings, or should this fail?
https://github.com/singer-io/getting-started/blob/master/docs/SPEC.md#schema-message isn't super clear to me, I think JSON Schema's spec says {}
just means anything goes. So maybe we should accept this and just convert the value to a string?visch
08/31/2023, 8:25 PMmeltano run tap-name target-postgres autoidm-utility
the utility just uses pandas to select * from xyz
on the table I wrote to, but really I only do this as I have a lot of other things I use the data for in the DB the use case you were talking about wouldn't 🤷visch
09/27/2023, 5:02 PMdatabasename
from database taps. Question from @burton_dewildeHenning Holgersen
12/01/2023, 1:38 PMKristjan K
01/31/2024, 3:52 PMReuben (Matatika)
02/03/2024, 12:56 AM/home/reuben/Documents/taps/tap-msaccess/tests/test_core.py::TestTapMSAccess::test_tap_stream_transformed_catalog_schema_matches_record failed with error: Test failed with exception
file /home/reuben/.cache/pypoetry/virtualenvs/tap-msaccess-XilzlSH0-py3.8/lib/python3.8/site-packages/singer_sdk/testing/templates.py, line 173
def run( # type: ignore[override]
E fixture 'stream' not found
> available fixtures: cache, capfd, capfdbinary, caplog, capsys, capsysbinary, config, doctest_namespace, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, resource, runner, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory
> use 'pytest --fixtures [testpath]' for help on them.
/home/reuben/.cache/pypoetry/virtualenvs/tap-msaccess-XilzlSH0-py3.8/lib/python3.8/site-packages/singer_sdk/testing/templates.py:173
Anyone run into this issue before? I wonder if there is some condition that needs to be met by the tap that makes the stream
fixture available internally... The tap is doing dynamic stream discovery if that helps narrow it down.william chaplin
02/05/2024, 7:54 PMIan OLeary
03/08/2024, 2:30 PMclass UsersListStream(JobDivaStream):
def get_new_paginator(self):
return None
def get_url_params(
self,
context: dict | None, # noqa: ARG002
next_page_token: date | None, # noqa: ANN401
) -> dict[str, Any]:
return {
"onlyInternalUsers": True,
}
I added this to my stream class - what else do I need to do? Or am I doing this wrong lolRuben Vereecken
03/27/2024, 3:36 PMtarget-airtable
) that I can install using poetry install
but not using pip install
, so meltano install
fails.
Apparently pip doesn’t have access to the singer-sdk
version that is specified, but poetry does. For singer-sdk = "^0.3.2"
, poetry installs 0.3.18
, which doesn’t show up under pip index versions singer-sdk
Investigating, thought I’d share as I goMishank Gehlot
03/28/2024, 10:30 AM2024-03-28T09:32:13.284781Z [info ] 2024-03-28 09:32:13,284 | INFO | root | tablename: "TableName_a3", shortname: A3 cmd_type=elb consumer=True name=mapper-companyspecifcmapper producer=True stdio=stderr string_id=mapper-companyspecifcmapper
2024-03-28T09:32:13.293916Z [info ] time=2024-03-28 09:32:13 name=target_postgres level=INFO message=Table '""tablename_a3""' does not exist. Creating... CREATE TABLE IF NOT EXISTS schema1.""tablename_a3"" ("_sdc_batched_at" timestamp without time zone, "_sdc_deleted_at" character varying, "_sdc_extracted_at" timestamp without time zone, "id" bigint, PRIMARY KEY ("id")) cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.301023Z [info ] Traceback (most recent call last): cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.301288Z [info ] File "/home/meltano/.meltano/loaders/target-postgres/venv/bin/target-postgres", line 8, in <module> cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.301545Z [info ] sys.exit(main()) cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.301735Z [info ] File "/home/meltano/.meltano/loaders/target-postgres/venv/lib/python3.9/site-packages/target_postgres/__init__.py", line 373, in main cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.301914Z [info ] persist_lines(config, singer_messages) cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.302092Z [info ] File "/home/meltano/.meltano/loaders/target-postgres/venv/lib/python3.9/site-packages/target_postgres/__init__.py", line 219, in persist_lines cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.302279Z [info ] stream_to_sync[stream].sync_table() cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.302451Z [info ] File "/home/meltano/.meltano/loaders/target-postgres/venv/lib/python3.9/site-packages/target_postgres/db_sync.py", line 589, in sync_table cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.307815Z [info ] self.query(query) cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.308244Z [info ] File "/home/meltano/.meltano/loaders/target-postgres/venv/lib/python3.9/site-packages/target_postgres/db_sync.py", line 311, in query cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.308603Z [info ] cur.execute( cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.308826Z [info ] File "/home/meltano/.meltano/loaders/target-postgres/venv/lib/python3.9/site-packages/psycopg2/extras.py", line 146, in execute cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.309039Z [info ] return super().execute(query, vars) cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.309251Z [info ] psycopg2.errors.SyntaxError: zero-length delimited identifier at or near """" cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.309467Z [info ] LINE 1: CREATE TABLE IF NOT EXISTS schema1.""tablename_a3""... cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.309692Z [info ] ^ cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.309902Z [info ] cmd_type=elb consumer=True name=target-postgres producer=False stdio=stderr string_id=target-postgres
2024-03-28T09:32:13.359303Z [error ] Loader failed
Anita Bajariya
03/29/2024, 7:09 AMSiddu Hussain
05/16/2024, 8:00 PMNir Diwakar (Nir)
06/12/2024, 8:54 AMReuben (Matatika)
06/17/2024, 4:22 PMtarget-mssql
to a newer SDK version, where it is not playing nicely with the SQLConnection refactor back in v0.20.0
... I'm getting an Invalid object name
error, which suggests to me some issue with the target engine/connection implementation (works fine on v0.19.0
, breaks on v0.20.0
). Would appreciate some pointers if anyone has some experience here. 🙂
`connector.py`: https://github.com/storebrand/target-mssql/blob/56968e01ab9f7295ef9a0aeeec96459353185d70/target_mssql/connector.py
SDK v0.19.0
<- v0.20.0
diff: https://github.com/meltano/sdk/compare/v0.19.0...v0.20.0?diff=split&w=#diff-db20b40a2eb1ac17938f49d9757779cdb9998129d7fc075a964d20096ddb4b48Reuben (Matatika)
06/18/2024, 1:58 PMvisch
08/20/2024, 6:59 PM{
"version": "0.2.0",
"configurations": [
{
"name": "target-hubspot Python Debug",
"type": "debugpy",
"request": "launch",
"module": "target_hubspot",
"console": "integratedTerminal",
"args": [
"--config",
"config.json",
"--input",
"data.singer",
]
}
]
}
I've gotten away for this long with pdb and some remote pdb telnet trickeryashish
09/18/2024, 4:02 PMprivate_key
in target-snowflake
? I see we can use private_key_path
thoughConner Panarella (SpaceCondor)
09/27/2024, 4:34 PMfor record in records:
insert_record = {column.name: record.get(column.name) for column in columns}
# No need to check for a KeyError here because the SDK already
# guarantees that all key properties exist in the record.
primary_key_value = "".join([str(record[key]) for key in primary_keys])
insert_records[primary_key_value] = insert_record
Wouldn't this potentially cause with records being erroneously thrown out? We are just concatenating the values of the primary keys to check for duplication.
So the following would be equivalent:
Record 1:
• Primary Key #1: AB
• Primary Key #2: C
Record 2:
• Primary Key #1: A
• Primary Key #2: BCConner Panarella (SpaceCondor)
09/30/2024, 8:27 PMtarget-postgres
Rafael Santana
10/01/2024, 7:59 PMtap-googhe-sheets
to target-bigquery
, but I'm having authentication problems with the target. A json service account is requested but my app only obtains oauth credentials from users. Is there a way to use target bigquery only with the credentials obtained from social login?Nir Diwakar (Nir)
10/02/2024, 2:47 PMloaders:
- name: target-elasticsearch
namespace: target_elasticsearch
pip_url: -e ./targets/target-elasticsearch
executable: target-elasticsearch
config:
url: ${ES_URL}
scheme: https
slack_channel: ${SLACK_CHANNEL}
slack_token: ${SLACK_TOKEN}
dagit_url: ${DAGIT_BASE_URL}
environment: ${ENV}
tap: ${TAP}
env:
MELTANO_ELT_BUFFER_SIZE: 20000000
or this:
loaders:
- name: target-elasticsearch
namespace: target_elasticsearch
pip_url: -e ./targets/target-elasticsearch
executable: target-elasticsearch
config:
url: ${ES_URL}
scheme: https
slack_channel: ${SLACK_CHANNEL}
slack_token: ${SLACK_TOKEN}
dagit_url: ${DAGIT_BASE_URL}
environment: ${ENV}
tap: ${TAP}
elt:
buffer_size: 20000000
David Peterson
10/29/2024, 8:40 PMEdgar RamĂrez (Arch.dev)
10/30/2024, 9:49 PMvisch
11/13/2024, 3:03 PMtarget-notifications
https://github.com/AutoIDM/target-apprise/releases/tag/v0.1.0
Now allows you to dynmically change your apprise uris based on incoming data https://github.com/AutoIDM/target-apprise?tab=readme-ov-file#dynamically-providing-target-emails so if you want different from/to emails based on data. ie your Datawarehouse you want to send notifications to the marketing team or the accounting team, you can do that now without having separate notification targetsmark_johnston
11/14/2024, 8:31 PMtarget-snowflake
and the difference between default_schema_name
and schema
config properties after we had permissions issues with file formats:
https://github.com/MeltanoLabs/target-snowflake/discussions/92#discussioncomment-11259580joshua_janicas
12/02/2024, 3:21 PMappend-only
vs upsert
method descriptions for load_method
. They sound the same to me...or maybe I need more coffee.
The method to use when loading data into the destination. append-only will always write all input records whether that records already exists or not.
Vs
upsert will update existing records and insert new records.
Does append-only
delete matching records and then just re-insert them, vs a traditional upsert?
2. How would (1) interact with hard_delete
? Wouldn't choosing overwrite
as the load method already act as a hard_delete? What about the other two options?Pedro Ceriotti
12/03/2024, 8:36 PMload_method
built-in setting works for target-postgres
(https://github.com/MeltanoLabs/target-postgres)?
It’s documented in the README file, but I have been testing different configurations and it doesn’t seem to work as expected. Curious if there’s support for overwrite
method and/or if there’s any alternative to achieve that other than implementing it by myself.
Thanks!Senne Vanstraelen
12/13/2024, 3:31 PMChase Brammer
02/26/2025, 2:52 AMtap = TapGitLab(config=TEST_CONFIG, catalog=TEST_CATALOG, parse_env_config=True)
Could someone point me to some code that passes the catalog object? I can't find the definition via a file or declared in code please?
And/Or how do I call a specific catalog item from a test? All I can see is tap.sync_all()
TYIALior Naim Alon
04/27/2025, 10:03 AMallowed_values=["0-1", "0-2", "0-3", "0-5", "0-48", "0-49", "0-47", "0-4", "0-27", "0-7", "0-8", "0-18", "0-116", "0-54", "0-19"] + [f"2-{i}" for i in range(1, 100000)]
In general i didn't understand the schema of the column_mapping configuration until i encountered errors so i think the logging aspect is important.
I'm not an expert on collaborating in open-source development so forgive me if my attitude is naive or misguided.
Thanks