Skip to content

Commit aaf40c3

Browse files
authored
Fix "Duplicate path found during parsing JSON object" clickhouse error (#2193)
1 parent 35dedee commit aaf40c3

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

internal-packages/clickhouse/src/taskRuns.test.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,4 +344,54 @@ describe("Task Runs V2", () => {
344344
expect(result2).toEqual([]);
345345
}
346346
);
347+
348+
clickhouseTest(
349+
"should be able to insert payloads with a duplicate path",
350+
async ({ clickhouseContainer }) => {
351+
const client = new ClickhouseClient({
352+
name: "test",
353+
url: clickhouseContainer.getConnectionUrl(),
354+
});
355+
356+
const insertPayloads = insertRawTaskRunPayloads(client, {
357+
async_insert: 0, // turn off async insert for this test
358+
});
359+
360+
const [insertPayloadsError, insertPayloadsResult] = await insertPayloads([
361+
{
362+
run_id: "run_1234",
363+
created_at: Date.now(),
364+
payload: {
365+
data: {
366+
title: {
367+
id: "123",
368+
},
369+
"title.id": 123,
370+
},
371+
},
372+
},
373+
]);
374+
375+
expect(insertPayloadsError).toBeNull();
376+
expect(insertPayloadsResult).toEqual(expect.objectContaining({ executed: true }));
377+
expect(insertPayloadsResult?.summary?.written_rows).toEqual("1");
378+
379+
const queryPayloads = client.query({
380+
name: "query-raw-task-run-payloads",
381+
query: "SELECT * FROM trigger_dev.raw_task_runs_payload_v1",
382+
schema: z.object({
383+
run_id: z.string(),
384+
created_at: z.coerce.date(),
385+
payload: z.unknown(),
386+
}),
387+
});
388+
389+
const [queryPayloadsError, resultPayloads] = await queryPayloads({ run_id: "run_1234" });
390+
391+
expect(queryPayloadsError).toBeNull();
392+
expect(resultPayloads).toEqual(
393+
expect.arrayContaining([expect.objectContaining({ run_id: "run_1234" })])
394+
);
395+
}
396+
);
347397
});

internal-packages/clickhouse/src/taskRuns.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export function insertTaskRuns(ch: ClickhouseWriter, settings?: ClickHouseSettin
5959
async_insert_max_data_size: "1000000",
6060
async_insert_busy_timeout_ms: 1000,
6161
enable_json_type: 1,
62+
type_json_skip_duplicated_paths: 1,
6263
...settings,
6364
},
6465
});
@@ -83,6 +84,7 @@ export function insertRawTaskRunPayloads(ch: ClickhouseWriter, settings?: ClickH
8384
async_insert_max_data_size: "1000000",
8485
async_insert_busy_timeout_ms: 1000,
8586
enable_json_type: 1,
87+
type_json_skip_duplicated_paths: 1,
8688
...settings,
8789
},
8890
});

0 commit comments

Comments
 (0)